Случай использования:
У меня есть тип поста, который относится к музыкальному шоу. «Время показа» фиксируется через дату публикации, которая установлена на некоторое время в будущем. Я нашел функцию, которая принимает будущие посты в блоге и оставляет дату, но помечает пост как опубликованный при сохранении, но не смог понять, как настроить его для пользовательского типа поста.
Функция ниже.
<?php
function setup_future_hook() {
// Replace native future_post function with replacement
remove_action('future_post','show', '_future_post_hook');
add_action('future_post', 'show', 'publish_future_post_now');
}
function publish_future_post_now($id) {
// Set new post's post_status to "publish" rather than "future."
wp_publish_post($id);
}
add_action('init', 'setup_future_hook');
?>
custom-post-types
init
curtismchale
источник
источник
remove_action
иadd_action
позвонить? Ваш второй параметр'show'
, но разве это не та функция, которую вы добавляете или удаляете?Ответы:
Удивительно, сочетая оба ответа от Майка и Яна, я придумал это, которое работает только для рассматриваемого типа поста. Нам не нужно условие show, потому что хук 'future_show' захватывает только тип поста show и обновляет его.
источник
Я не могу сказать наверняка, так как у меня нет вашего сайта для тестирования, но я считаю, что вам просто нужно удалить
'show'
изremove_action()
иadd_action()
звонки. Этаwp_publish_post()
функция независима от типов записей, по крайней мере, именно так она выглядит при чтении кода. Так что попробуйте это:Конечно, если вы хотите ограничиться только показом, вы можете захотеть сделать что-то вроде этого (хотя логика будет более сложной, если она вам понадобится и для других типов постов):
Надеюсь это поможет?
источник
Я думаю, что это действие вызвано
wp_transition_post_status
. Код является:Таким образом, для нормальных будущих постов последний хук будет
future_post
, но для вашего типа это будетfuture_show
или как бы там ни было ваш слаг типа.источник
Если все, что вы хотите сделать, это добавить дополнительную дату для 'show times', может быть проще добавить мета-бокс, который точно делает это - использование даты публикации для подделки может быть потенциально проблематичным, так как WordPress установит ее на «Будущий» статус всякий раз, когда он обновляется с будущей датой публикации (я думаю), поэтому вам придется подключаться каждый раз, когда сообщение обновляется, чтобы вернуть его обратно. Кроме того, таким образом вы можете зарезервировать «Дата публикации» для того, что он предназначен.
Я бы, вероятно, просто использовал
meta_key
и пользовательский мета-блок. Хотя это зависит от того, насколько сложны ваши запросы, которые показывают сообщения.Если вы установите meta_value как метку времени, вы можете упорядочить по дате показа еще или выбрать до / после определенной даты:
$events = get_posts( 'post_type=events&meta_key=show_time&meta_value=' . strtotime( '+1 week' ) . '&meta_compare=<&orderby=meta_value' );
Получил бы все "события" с показом времени не позднее, чем через неделю от текущей даты. Примечание: выше не проверено, но должно работать :)
источник
WP Dev Nacin использует простую функцию переопределения:
источник