it-swarm.com.ru

Пользовательский статус сообщения не работает

Я пытаюсь создать два пользовательских статуса сообщения ". Я использовал Кодекс для генерации кода, и это не сработало. Затем я пошел в http://generatewp.com/post-status и это тоже не сработало. Он не отображается в раскрывающемся списке рядом с "Статус" в "Редактировать сообщение".

Вы видите что-то не так с моим кодом?

// ***** http://generatewp.com/post-status **** //

function custom_post_status() {

$args = array(
'label' => 'Reserve',
'label_count' => 'Reserve (%s)',
'public' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'exclude_from_search' => false,
);
register_post_status( 'Reserve', $args );

}

add_action( 'init', 'custom_post_status', 0 );

function custom_post_status_2() {

$args = array(
'label' => 'Ready to be Scheduled',
'label_count' => 'Ready to be Scheduled (%s)',
'public' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'exclude_from_search' => false,
);
register_post_status( 'Ready to be Scheduled', $args );

}

add_action( 'init', 'custom_post_status_2', 0 );

Спасибо!

5
Tara

Значения post status, по-видимому, жестко запрограммированы в ядре. Вот код поля состояния для экрана редактирования:

<span id="post-status-display">
<?php
switch ( $post->post_status ) {
        case 'private':
                _e('Privately Published');
                break;
        case 'publish':
                _e('Published');
                break;
        case 'future':
                _e('Scheduled');
                break;
        case 'pending':
                _e('Pending Review');
                break;
        case 'draft':
        case 'auto-draft':
                _e('Draft');
                break;
}
?>
</span>

Кодекс говорит :

ЗАМЕЧАНИЕ. Эта функция НЕ добавляет статус зарегистрированного сообщения в панель администратора. Эта функциональность ожидает дальнейшего развития. Пожалуйста, обратитесь к Trac Ticket # 12706. Рассмотрите хук действия post_submitbox_misc_actions для добавления этого параметра.

Билет # 12706 был создан 5 лет назад!

Так что я не думаю, что это в настоящее время поддерживается ядром.

Если вы вручную измените статус сообщения на статус зарегистрированного пользовательского сообщения, то вы увидите его среди вкладок на экране edit.php.

Тестирование WP 4.1:

Когда я опробую пример Кодекса:

function my_custom_post_status(){
        register_post_status( 'unread', array(
                'label'                     => _x( 'Unread', 'post' ),
                'public'                    => true,
                'exclude_from_search'       => false,
                'show_in_admin_all_list'    => true,
                'show_in_admin_status_list' => true,
                'label_count'               => _n_noop( 'Unread <span class="count">(%s)</span>', 'Unread <span class="count">(%s)</span>' ),
        ) );
}
add_action( 'init', 'my_custom_post_status' );

и вручную измените статус сообщения на unread, тогда статус для этого сообщения не отображается в мета-поле:

Missing status

С другой стороны, это отображается во вкладках на экране edit.php:

Shows in the edit.php tabs

5
birgire

Я бы изменил приоритет add_action на 1 и посмотрел, исправит ли это что-то.

Насколько мне известно, приоритет должен быть целым числом от 1 до 99 включительно.

Используйте 0 или 100+, и я не верю, что ваше действие когда-нибудь сработает.

Я также рекомендовал бы изменить имена ваших зарегистрированных статусов, чтобы они соответствовали тем, которые существуют (например, все строчные буквы без пробелов и, возможно, короткие). Вы можете проверить столбец post_status таблицы wp_posts, чтобы увидеть, какие ограничения существуют для них, но попробуйте:

register_post_status( 'reserve', $args );

register_post_status( 'ready', $args );

Ваши ярлыки заставят их выглядеть достойно.

0
Privateer