Получить ссылку на опубликованный пост?

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

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

Шаги для реализации

  1. Создание функции для изменения статуса поста: Вы уже создали функцию publish_post_status, которая проверяет параметры в URL и обновляет статус поста. Ваш код вполне рабочий, но я бы предложил немного его улучшить для большей безопасности и читаемости.

  2. Использование nonce для безопасности: Рекомендуется использовать nonce для защиты вашей функции от неправомерного использования.

  3. Генерация ссылки для публикации: Вы можете создать ссылку на основе текущего идентификатора поста, которая будет вызывать вашу функцию.

Обновленный код

Давайте улучшил ваш код и добавим использование 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>';

Эти ссылки сгенерируют адреса, которые, при нажатии, вызовут вашу функцию публикации или постановки в очередь с правильными параметрами и проверкой безопасности.

Заключение

Такой подход обеспечивает надежность и безопасность вашего кода, а также позволяет вам легко изменять статусы постов с помощью простых ссылок на вашем сайте. Не забудьте протестировать этот код в безопасной среде, прежде чем развертывать его на рабочем сайте.

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

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