Как в WordPress создать свой пост-статус

Как в WordPress создать свой пост-статус

Для чего нужны свои кастомные статусы? Вариантов как всегда много. Я их использовал всего лишь раз, помечая таким образом товары не попавшие не в одну из категорий при импорте из маркета яндекса.

Ниже, приведен пример создания своего кастомного статуса для записи. Подробнее о всех параметрах описано в официальной документации кодекса WP. Хочу лишь обратить внимание на следующее.

  1. Параметр "label_count", должен указываться через функцию "_n_noop()"
  2. Огорчает то, что свои статусы для записей автоматически не отображаются на странице создания/редактирования записи, и в таблицы со списком записей (при наведения на название записи, кнопка свойства).

register_post_status('OUTSIDE', array(
	'label'				=> 'Вне категорий',
	'label_count'			=> _n_noop('Вне категорий <span class="count">(%s)</span>', 'Вне категорий <span class="count">(%s)</span>'),
	'public'			=> true,
	'internal'			=> true,
	'exclude_from_search'		=> true,
	'show_in_admin_all_list'	=> true,
	'show_in_admin_status_list'	=> true,
));

Для этого пришлось использовать "костыль найденный в просторах интернета. А именно:

/* Вызов идет в конструкторе класса */
add_action('admin_footer-post.php', array($this, 'admin_footer_post'));
add_action('admin_footer-post-new.php', array($this, 'admin_footer_post'));
add_action('admin_footer-edit.php',  array($this, 'admin_footer_edit'))

/* Просто методы класса */

/**
	* @hook
	*	- admin_footer-post.php
	*	- admin_footer-post-new.php
	*/
public function admin_footer_post()
{
	if(get_current_screen() -> post_type == 'ya-catalog'):
		?>
			<script>
				jQuery(document).ready(function()
				{
					jQuery('select[name="post_status"]').append('<option value="OUTSIDE">Вне категорий</option>');
				});
			</script>
		<?php
	endif;
}

/**
	* @hook admin_footer-edit.php
	*/
public function admin_footer_edit()
{
	if(get_current_screen() -> post_type == 'ya-catalog'):
		?>
			<script>
				jQuery(document).ready(function()
				{
					jQuery('select[name="_status"]').append('<option value="OUTSIDE">Вне категорий</option>');
				});
			</script>
		<?php
	endif;
}

Решение не самое элегантное, но это все же лучше чем ничего.

Как в WordPress создать свой пост-статус
Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *