Добавить новый статус для записи

Хочу добавить новый статус для некоторых постов

Нашел подходящий код, но есть нюанс. Когда меняю статус поста на "архив" меняется кнопка с "обновить" на "опубликовать". Можно сделать чтобы пост имел кнопку обновить со статусом "архив"?

Например если ставить видимость: "личное" то кнопка обновить остается. Возможно добавить статус "архив" в раздел видимость и как это сделать?

Вот мой код

//регистрируем статус поста
function true_status_custom(){
	register_post_status( 'archive', array(
		'label'                     => 'Архив',
		'label_count'               => _n_noop( 'Архив <span class="count">(%s)</span>', 'Архивы <span class="count">(%s)</span>' ),
		'public'                    => true,
		'show_in_admin_status_list' => true // если установить этот параметр равным false, то следующий параметр можно удалить
	) );
}
add_action( 'init', 'true_status_custom' );

//Добавление статуса в drop-down статусов на странице редактирования записи
function true_append_post_status_list(){
	global $post;
	$optionselected = '';
	$statusname = '';
	if( $post->post_type == 'post' ){ // если хотите, можете указать тип поста, для которого регистрируем статус, а можете и вовсе избавиться от этого условия
		if($post->post_status == 'archive'){ // если посту присвоен статус архива
			$optionselected = ' selected="selected"';
			$statusname = "$('#post-status-display').text('Архивировано');";
		}
		/*
		 * Код jQuery мы просто выводим в футере
		 */
		echo "<script>
		jQuery(function($){
			$('select#post_status').append('<option value=\"archive\"$optionselected>Архив</option>');
			$statusname
		});
		</script>";
	}
}
add_action('admin_footer-post-new.php', 'true_append_post_status_list'); // страница создания нового поста
add_action('admin_footer-post.php', 'true_append_post_status_list'); // страница редактирования поста
Заметки к вопросу:
Kama 29 дней назад

В WordPress пост-статусы — это боль. Зарегистрировать кастомный статус просто, но интегрировать его в UI — сплошной костыль.

Самая большая проблема: на странице редактирования поста твой статус просто не появляется. WordPress заточен под свои publish, draft, pending и т.д. Все остальные надо вручную внедрять в интерфейс и контролировать при сохранении.

Что приходится делать:

  1. Добавлять кастомные статусы в выпадающий список через JS (обычно jQuery).
  2. Следить за сохранением: WordPress может сам поменять твой статус на дефолтный. Нужно хукаться на save_post, transition_post_status, wp_insert_post_data и т.п.
  3. Контролировать, когда и как показывать статус — вручную. Это касается и фильтрации, и прав доступа, и логики отображения.

Люди пробуют, страдают, делают так же. В плагинах вроде WP Leiki можно подсмотреть реализацию, но там тоже всё на костылях. WordPress просто не предусматривает нормальной поддержки кастомных статусов в админке.

Короче, если хочешь использовать кастомные статусы:

  • готовься писать JS, PHP и фильтры руками;
  • тестируй каждый кейс отдельно;
  • и подумай, может, лучше вообще обойтись без статусов — через мета, таксономии, или свой флоу.

Это не та часть WP, которую можно "просто добавить".

lethalblo 29 дней назад

А есть возможность отредактировать статус "личное" ?
К примеру чтобы посты с этим статусом показывались только зарегистрированным пользователям?