[WordPress]投稿画面に予約投稿のURLを表示する方法

WordPress

今回の記事は「パーマリンクの設定」が 違う場合、上手く稼働しないケースもございますのでご注意下さい。

前回の記事では記事投稿一覧ページで「予約投稿URL」を表示させる方法を紹介しましたが、今回下記の画像のように「メタボックス」を使用し投稿画面右側のメニュー内に表示させる方法をご紹介いたします!

お使いのテーマや、導入しているプラグインによっては問題なく予約投稿URLが表示されている場合もございます。

コードの概要

functions.phpファイルを利用するので必ずバックアップを取るなどしてから自己責任で行って下さい。

カスタムメタボックスの追加

まず、カスタムメタボックスを追加する関数を作成します。add_meta_box関数を使用して、メタボックスを設定します。

// カスタムメタボックスを追加する
function add_custom_meta_box() {
    add_meta_box(
        'custom-meta-box', // メタボックスのID
        '予約投稿URL', // メタボックスのタイトル
        'render_custom_meta_box', // コールバック関数
        'post', // メタボックスを表示する投稿タイプ
        'side', // メタボックスの位置('side'で右側に表示)
        'default' // メタボックスの優先度
    );
}
add_action('add_meta_boxes', 'add_custom_meta_box');

この関数は、投稿編集画面の右側に「予約投稿URL」というタイトルのメタボックスを追加します。

メタボックスのコールバック関数

次に、メタボックスの内容を表示するコールバック関数を作成します。この関数では、予約投稿のURLを取得して表示します。

// カスタムメタボックスのコールバック関数
function render_custom_meta_box($post) {
    $post_id = $post->ID;
    $url = get_scheduled_post_url_custom($post_id);

    if ($url) {
        echo '<p><strong>予約投稿URL:</strong><br />';
        echo '<a href="' . esc_url($url) . '" target="_blank">' . esc_html($url) . '</a></p>';
    } else {
        echo '<p>予約投稿はありません。</p>';
    }
}

この関数は、予約投稿のURLを取得して表示するか、予約投稿がない場合は「予約投稿はありません」と表示します。

予約投稿のURLを取得する関数

予約投稿のURLを取得する関数を作成します。この関数は、投稿の公開予定日を基にカスタム構造のURLを生成します。

// 予約投稿のURLを取得する関数
function get_scheduled_post_url_custom($post_id) {
    $post = get_post($post_id);
    if ($post && $post->post_status == 'future') {
        // 公開予定の日付を取得する
        $scheduled_date = strtotime($post->post_date);
        $year = date('Y', $scheduled_date);
        $month = date('m', $scheduled_date);
        $day = date('d', $scheduled_date);

        // カスタム構造に基づいてURLを構築する
        $custom_permalink = home_url("/$year/$month/$day/{$post->ID}/");

        return $custom_permalink;
    }
    return false;
}

この関数は、投稿の公開予定日を取得し、その日付を基にカスタムURLを生成して返します。

パーマリンクをカスタマイズする

最後に、投稿のパーマリンクを予約投稿のURLにカスタマイズするためのフィルターを追加します。

// post_linkフィルターを使って予約投稿のURLを設定する
function customize_scheduled_post_permalink($permalink, $post) {
    if ($post->post_status == 'future') {
        // 公開予定の日付を取得する
        $scheduled_date = strtotime($post->post_date);
        $year = date('Y', $scheduled_date);
        $month = date('m', $scheduled_date);
        $day = date('d', $scheduled_date);
        
        // カスタム構造に基づいてURLを構築する
        $custom_permalink = home_url("/$year/$month/$day/{$post->ID}/");

        return $custom_permalink;
    }
    return $permalink;
}
add_filter('post_link', 'customize_scheduled_post_permalink', 10, 2);

このフィルターは、予約投稿の場合にパーマリンクを予約投稿のURLに変更します。

まとめ

以上で、WordPressで予約投稿のURLを表示し、パーマリンクを設定する方法を解説しました。
予約投稿を行うと、右側に表示されるようになった「予約投稿URL」にURLが表示されるようになったかと思います。(予約投稿後、表示されない場合は更新して下さい。)

これにより、管理画面での投稿管理がさらに便利になることでしょう。

また、以前に投稿記事一覧ページの方に「予約投稿URL」を表示する方法を紹介しましたので、興味のある方はそちらも御覧ください。

タイトルとURLをコピーしました