Вопрос или проблема
Я пишу свою собственную фронт-энд админ панель.
Теперь я хочу узнать, как восстановить пост с помощью wp_untrash_post и установить статус “pending” вместо “draft” (по умолчанию).
Как это можно сделать?
Официальная документация для wp_untrash_post
документирует фильтр для установки статуса, который она будет использовать:
https://developer.wordpress.org/reference/functions/wp_untrash_post/
Этот фильтр можно использовать, чтобы вернуть pending
вместо статуса.
Если это не подходит, можно установить статус поста как pending после вызова wp_untrash_post
, это не обязательно должно происходить в одном вызове функции, например:
wp_untrash_post(....);
<?php
// Конечно, это должно быть сделано только в среде разработки и закомментировано или удалено после развертывания на вашем рабочем сайте.
$data = [
'ID' => $post_id,
'post_status' => 'pending',
];
wp_update_post( $data );
Однако, обратите внимание, что если вы вызовете только wp_update_post
, это также восстановит пост, но ни один из фильтров и хуков, связанных с восстановлением, не будет выполнен, что может вызвать проблемы.
Ответ или решение
В данном вопросе мы рассматриваем специфику работы с функцией wp_untrash_post
в WordPress, а именно, как восстановить запись и установить статус "ожидающий", а не "черновик", который задан по умолчанию. Для решения этой задачи мы будем использовать фильтр, предоставляемый WordPress, и при необходимости, дополнительные функции для изменения статуса записи после восстановления.
Теория
Восстановление записи с использованием функции wp_untrash_post
подразумевает возврат записи из "Корзины" обратно в активное состояние. По умолчанию, восстановленные записи получают статус "черновик". Однако, WordPress позволяет кастомизировать это поведение с использованием фильтров.
Фильтр wp_untrash_post_status
предоставляет возможность изменить статус, который будет применён к восстановленной записи. Этот фильтр принимает два аргумента: статус по умолчанию ("черновик") и ID записи, которую мы восстанавливаем. Используя этот фильтр, мы можем вернуть "ожидающий" в качестве статуса:
function set_post_status_pending( $status, $post_id ) {
return 'pending';
}
add_filter( 'wp_untrash_post_status', 'set_post_status_pending', 10, 2 );
Это позволит функции wp_untrash_post
установить статус записи на "ожидающий" сразу после восстановления.
Пример
Рассмотрим пример реализации, который иллюстрирует использование фильтра для изменения статуса записи с "черновик" на "ожидающий":
function set_post_status_pending( $status, $post_id ) {
// Устанавливаем статус "ожидающий" для всех записей после восстановления
return 'pending';
}
add_filter( 'wp_untrash_post_status', 'set_post_status_pending', 10, 2 );
$post_id = 123; // ID записи, которую нужно восстановить
wp_untrash_post( $post_id );
В этом примере, фильтр add_filter
добавлен к wp_untrash_post_status
. Это гарантирует, что, когда wp_untrash_post
вызвана для конкретной записи с ID 123
, её статус будет изменён на "ожидающий", а не на "черновик".
Применение
Использование фильтров для изменения поведения функций WordPress является стандартной практикой при разработке кастомных решений на платформе. Это обеспечивает гибкость в управлении контентом и позволяет разработчикам адаптировать функционал под уникальные требования проекта.
Однако, если вы предпочитаете изменять статус записи после вызова wp_untrash_post
, можно воспользоваться функцией wp_update_post
. Эта функция позволяет напрямую обновлять статус записи после её восстановления:
$post_id = wp_untrash_post(123);
$data = array(
'ID' => $post_id,
'post_status' => 'pending',
);
wp_update_post( $data );
Таким образом, сначала выполняется восстановление записи, а затем отдельным вызовом wp_update_post
устанавливается необходимый статус.
Дополнительные замечания
Важно отметить, что использование двухэтапного подхода (вызов wp_untrash_post
, а затем wp_update_post
) может вызвать пропуск хуков и фильтров, связанных с восстановлением записей. Поэтому рекомендуется использовать фильтр wp_untrash_post_status
для обеспечения полной интеграции со всеми существующими хуками и фильтрами WordPress.
Кроме того, перед внедрением этого изменения в рабочей среде важно протестировать его в тестовой среде, чтобы избежать возможных конфликтов и ошибок. Это стандартная практика в разработке, позволяющая обеспечить стабильность и надежность кодовой базы.
Итак, использование фильтра wp_untrash_post_status
и последующего вызова wp_update_post
предоставляет надёжный механизм для урегулирования статусов записей в WordPress, что может быть особенно полезно в процессе разработки кастомизированных админ-панелей и более сложных управляемых решений для контента.