Как вернуть публикацию в статус «Ожидание» (не черновик)

Вопрос или проблема

Я пишу свою собственную фронт-энд админ панель.

Теперь я хочу узнать, как восстановить пост с помощью wp_untrash_post и установить статус “pending” вместо “draft” (по умолчанию).

Как это можно сделать?

Официальная документация для wp_untrash_post документирует фильтр для установки статуса, который она будет использовать:

enter image description here

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, что может быть особенно полезно в процессе разработки кастомизированных админ-панелей и более сложных управляемых решений для контента.

Оцените материал
Добавить комментарий

Капча загружается...