WordPress как на ладони
Дешевый WordPress пакет для разработки Хостинг, VPS/VDS и отдельные сервера только на SSD дисках. 7 дней бесплатного тестирования.

register_post_status() WP 3.0

Функция для создания нового или редактирования старого статуса поста, на основе переданных параметров.

Эта функция должна вызываться во время или после события init.

Эта функция не добавляет новый зарегистрированный статус записи в админ-панель. Функция в процессе доработки.

Хуков нет.

Возвращает

Массив аргументов.

Использование

register_post_status( $post_status, $args );
$post_status(строка) (обязательный)

Название статуса поста.

Статусы уже зарегистрированные в WP:

  • publish - опубликованный пост;
  • inherit - ревизия;
  • pending - на проверке;
  • private - личная запись (доступна только автору);
  • future - публикация в будущем;
  • draft - черновик;
  • trash - запись находится в корзине.

По умолчанию: нет

$args(строка/массив)

Массив аргументов статуса поста. По умолчанию:

// Аргументы с начальным _ зарезервированы для внутреннего использования.
$defaults = array(
	'label'                     => false,
	'label_count'               => false,
	'exclude_from_search'       => null,
	'_builtin'                  => false,
	'public'                    => null,
	'internal'                  => null,
	'protected'                 => null,
	'private'                   => null,
	'publicly_queryable'        => null,
	'show_in_admin_status_list' => null,
	'show_in_admin_all_list'    => null,
);
  • label (строка)
    Описывающее название для статуса поста, предназначенное для перевода.
    По умолчанию: $post_status

  • label_count (строка)
    Текст отображаемый в консоли админ панели (если вы не хотите количество записей с этим статусом).
    По умолчанию: false

  • exclude_from_search (логический)
    Исключить ли посты с этим статусом из результатов поиска. true - исключить.
    По умолчанию: значение $internal

  • public (логический)
    Показывать ли посты с этим статусом в лицевой части сайта. true - показывать.
    По умолчанию: null

  • $internal (true/false)
    Статус предназначен только для внутреннего использования.
    Default: false

  • $protected (true/false)
    Должен ли быть пост с этим статусом защищенным (protected)?
    Default: false

  • $private (true/false)
    Должен ли быть пост с этим статусом приватным?
    Default: false

  • $publicly_queryable (true/false)
    Должен ли пост с этим статусом участвовать в публичных запросах?
    Default: значение $public

  • show_in_admin_all_list (логический)
    Включить ли записи с этим статусом в список записей в админ-панели для. true - включить.
    По умолчанию: значение $internal

  • show_in_admin_status_list (логический)
    Показывать ли статус в списке статусов вверху таблицы постов:

    status-in-head

    По умолчанию: значение $internal

  • $_builtin (true/false)
    Является ли статус встроенным. Только для использования ядром.
    Default: false

Примеры

#1. Пример регистрации статуса поста под названием Unread:

add_action( 'init', 'my_custom_post_status' );
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>' ),
	) );
}

Код register_post_status: wp-includes/post.php VER 4.9.8

<?php
function register_post_status( $post_status, $args = array() ) {
	global $wp_post_statuses;

	if (!is_array($wp_post_statuses))
		$wp_post_statuses = array();

	// Args prefixed with an underscore are reserved for internal use.
	$defaults = array(
		'label' => false,
		'label_count' => false,
		'exclude_from_search' => null,
		'_builtin' => false,
		'public' => null,
		'internal' => null,
		'protected' => null,
		'private' => null,
		'publicly_queryable' => null,
		'show_in_admin_status_list' => null,
		'show_in_admin_all_list' => null,
	);
	$args = wp_parse_args($args, $defaults);
	$args = (object) $args;

	$post_status = sanitize_key($post_status);
	$args->name = $post_status;

	// Set various defaults.
	if ( null === $args->public && null === $args->internal && null === $args->protected && null === $args->private )
		$args->internal = true;

	if ( null === $args->public  )
		$args->public = false;

	if ( null === $args->private  )
		$args->private = false;

	if ( null === $args->protected  )
		$args->protected = false;

	if ( null === $args->internal  )
		$args->internal = false;

	if ( null === $args->publicly_queryable )
		$args->publicly_queryable = $args->public;

	if ( null === $args->exclude_from_search )
		$args->exclude_from_search = $args->internal;

	if ( null === $args->show_in_admin_all_list )
		$args->show_in_admin_all_list = !$args->internal;

	if ( null === $args->show_in_admin_status_list )
		$args->show_in_admin_status_list = !$args->internal;

	if ( false === $args->label )
		$args->label = $post_status;

	if ( false === $args->label_count )
		$args->label_count = _n_noop( $args->label, $args->label );

	$wp_post_statuses[$post_status] = $args;

	return $args;
}

Cвязанные функции

Из метки: Расширения WP (доп возможности регистрация)

Еще из метки: statuses (статус записи коммента юзера)

Еще из раздела: Записи: посты, страницы, ...

6 комментов
  • Олег cайт: laura.co.ua

    Было бы не плохо обновить этот пост. Т.к. задача редкая, но иногда очень нужна!

    Особенно очень интересно, как можно создать статусы только для Custom Post Type (не затрагивая дефолтных постов)! Буду очень признателен (и думаю не только я), если такое описание появится на Вашем сайте!

    3
    Ответить2.2 года назад #
    • Kama6958

      Обновлю как появится время. Эта тема такая корявая, там по коду запутано...

      1
      Ответить2.2 года назад #
  • Юрий

    Добрый день. Подскажите, WordPress выдержит 200-300000 опубликованных постов? На сколько сильно скажется на скорости сайта это, спасибо

    Ответить1.7 год назад #
    • Kama6958

      Выдержит. Насколько сильно не знаю - у меня такого опыта нет. Попробуйте забить его данными и посмотреть что будет. Там много от чего зависит и много что придется оптимизировать по запросам...

      Ответить1.7 год назад #
      • Юрий

        Спасибо большое, буду проверять на нагрузку. Подскажите пожалуйста еще, в базе в $post_status достаточно ли просто устанавливать статусы, больше ни где менять ни чего не надо?

        Ответить1.7 год назад #
        • Kama6958

          Да, можно просто изменить статус - он самодостаточный...

          1
          Ответить1.7 год назад #
Здравствуйте, !     Войти . Зарегистрироваться