Вопрос или проблема
Существует ли способ вызвать ссылку, чтобы при нажатии она публиковала пост по предоставленному мной ID? У меня есть get_delete_post_link( $postID )
, настроенный правильно, и я хотел бы сделать то же самое, чтобы черновик стал опубликованным, или, если вы не можете опубликовать пост, сделать его ожидающим. У меня также есть этот код, работающий в моем файле functions.php, так что, возможно, тоже есть способ вызвать его, если ссылка будет нажата.
Я использовал URL-параметры и создал специальную функцию, вызываемую при инициализации:
add_action( 'init', 'publish_post_status' );
function publish_post_status($post_id){
if (isset($_GET['publish']) && current_user_can('publish_posts')) {
if ($_GET['publish'] == "true") {
$current_post = get_post( $_GET['post_id'], 'ARRAY_A' );
$current_post['post_status'] = 'publish';
wp_update_post($current_post);
}
}
if (isset($_GET['queue'])) {
if ($_GET['queue'] == "true") {
$current_post = get_post( $_GET['post_id'], 'ARRAY_A' );
$current_post['post_status'] = 'pending';
wp_update_post($current_post);
}
}
}
Ответ или решение
Для того чтобы создать ссылку, которая будет публиковать пост по заданному идентификатору, вы можете использовать встроенные функции WordPress и механизм управления параметрами URL. В вашем случае уже имеется начальный код, который вы можете расширить и улучшить.
Шаги для реализации
-
Создание функции для изменения статуса поста: Вы уже создали функцию
publish_post_status
, которая проверяет параметры в URL и обновляет статус поста. Ваш код вполне рабочий, но я бы предложил немного его улучшить для большей безопасности и читаемости. -
Использование nonce для безопасности: Рекомендуется использовать nonce для защиты вашей функции от неправомерного использования.
-
Генерация ссылки для публикации: Вы можете создать ссылку на основе текущего идентификатора поста, которая будет вызывать вашу функцию.
Обновленный код
Давайте улучшил ваш код и добавим использование nonce:
add_action( 'init', 'publish_post_status' );
function publish_post_status() {
if (isset($_GET['publish']) && current_user_can('publish_posts') && isset($_GET['post_id']) && isset($_GET['_nonce'])) {
// Проверка nonce
if (wp_verify_nonce($_GET['_nonce'], 'publish_post_' . $_GET['post_id'])) {
$current_post = get_post($_GET['post_id'], 'ARRAY_A');
$current_post['post_status'] = 'publish';
wp_update_post($current_post);
// Перенаправление после успешного обновления
wp_redirect(admin_url('edit.php'));
exit;
}
}
if (isset($_GET['queue']) && current_user_can('edit_posts') && isset($_GET['post_id']) && isset($_GET['_nonce'])) {
// Проверка nonce
if (wp_verify_nonce($_GET['_nonce'], 'queue_post_' . $_GET['post_id'])) {
$current_post = get_post($_GET['post_id'], 'ARRAY_A');
$current_post['post_status'] = 'pending';
wp_update_post($current_post);
// Перенаправление после успешного обновления
wp_redirect(admin_url('edit.php'));
exit;
}
}
}
// Функция для генерации ссылки
function generate_publish_link($post_id) {
$nonce = wp_create_nonce('publish_post_' . $post_id);
return add_query_arg(array(
'publish' => 'true',
'post_id' => $post_id,
'_nonce' => $nonce
), home_url());
}
function generate_queue_link($post_id) {
$nonce = wp_create_nonce('queue_post_' . $post_id);
return add_query_arg(array(
'queue' => 'true',
'post_id' => $post_id,
'_nonce' => $nonce
), home_url());
}
Как использовать
Теперь вы можете использовать функции generate_publish_link($post_id)
и generate_queue_link($post_id)
для создания ссылок для публикации или постановки поста в статус «Ожидание». Пример использования:
echo '<a href="' . generate_publish_link($post->ID) . '">Опубликовать пост</a>';
echo '<a href="' . generate_queue_link($post->ID) . '">Поставить в очередь</a>';
Эти ссылки сгенерируют адреса, которые, при нажатии, вызовут вашу функцию публикации или постановки в очередь с правильными параметрами и проверкой безопасности.
Заключение
Такой подход обеспечивает надежность и безопасность вашего кода, а также позволяет вам легко изменять статусы постов с помощью простых ссылок на вашем сайте. Не забудьте протестировать этот код в безопасной среде, прежде чем развертывать его на рабочем сайте.