[WordPress]予約投稿のURLを記事一覧ページに表示する方法

WordPress

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

WordPressを利用していると、予約投稿を活用する機会が多くあります。
しかし、予約投稿のURLを確認するためには一手間かかることがあり、管理画面で簡単に確認することができません。

今回の記事では、そんな予約投稿のURLを記事投稿一覧ページに表示させる方法を紹介したいと思います。

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

予約投稿のURLとは

WordPressの予約投稿のURLは、投稿が予約された時点で生成されるURLのことを指します。

ただし、このURLなんですが、再編集をすると下記の画像の様に「URL」には予約投稿のURLが表示されますが、クリックしてみるとどういうわけか「プレビューのURL」が表示されます。

プレビューのURLをクリックし、別ウィンドウで開いたアドレスは当然ながら「/?p=」とプレビューのURLになってます。

これだと個人的にちょっと困ってしまうんですよね。
X(旧ツイッター)やInstagramの方の予約投稿をしたいときとかに予約投稿のURLをメモていなかった時に「どこを見れば良いんだと?」

ちなみに私の場合は「検証」を利用してURLをソースコードから該当のURLを抜き出していたんですが、毎回コレはきつい。。。

ということで、予約投稿URLが確認出来るようにサクッとWordPressの方を改修していきたいと思います。

functions.php

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

以下コードをfunctions.phpファイルに追加し「ファイルを更新」ボタンをクリックして、変更を保存します。

// 予約投稿のURLを表示するカスタムカラムを追加
function add_custom_column($columns) {
    $columns['scheduled_url'] = '予約投稿URL';
    return $columns;
}
add_filter('manage_posts_columns', 'add_custom_column');

// 予約投稿のURLをカスタムカラムに表示
function custom_column_content($column_name, $post_id) {
    if ($column_name == 'scheduled_url') {
        $post = get_post($post_id);
        if ($post->post_status == 'future') {
            $url = get_scheduled_permalink($post_id);
            if ($url) {
                echo '<a href="' . esc_url($url) . '">' . esc_html($url) . '</a>';
            } else {
                echo 'N/A';
            }
        } else {
            echo 'N/A';
        }
    }
}
add_action('manage_posts_custom_column', 'custom_column_content', 10, 2);

// 予約投稿のURLを生成する関数
function get_scheduled_permalink($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;
}

// 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);

注意点

  • バックアップを取る: functions.phpファイルを編集する前に、必ずバックアップを取ることをおすすめします。間違ったコードを追加すると、サイトが正しく動作しなくなる可能性があります。
  • テーマの子テーマを使用: 直接親テーマのfunctions.phpを編集するのではなく、子テーマを使用することで、テーマのアップデート時に変更が失われるのを防ぐことができます。

コードの内容

カスタムカラムを追加

WordPressの管理画面で予約投稿のURLを表示するために、まずは functions.php ファイルに以下のコードを追加します。

// 予約投稿のURLを表示するカスタムカラムを追加
function add_custom_column($columns) {
    $columns['scheduled_url'] = '予約投稿URL';
    return $columns;
}
add_filter('manage_posts_columns', 'add_custom_column');

この関数は、投稿一覧の管理画面に「予約投稿URL」というカスタムカラムを追加します。

カスタムカラムに内容を表示する

次に、カスタムカラムに予約投稿のURLを表示するための関数を定義します。投稿のステータスが「予約(future)」の場合に、適切なURLを表示します。

// 予約投稿のURLをカスタムカラムに表示する関数
function custom_column_content($column_name, $post_id) {
    if ($column_name == 'scheduled_url') {
        $post = get_post($post_id);
        if ($post->post_status == 'future') {
            $url = get_scheduled_permalink($post_id);
            if ($url) {
                echo '<a href="' . esc_url($url) . '">' . esc_html($url) . '</a>';
            } else {
                echo 'N/A';
            }
        } else {
            echo 'N/A';
        }
    }
}
add_action('manage_posts_custom_column', 'custom_column_content', 10, 2);

この関数では、投稿のステータスが「予約投稿」の場合に、投稿の予約URLを表示します。もし予約されていない場合は「N/A」と表示されます。

予約投稿のURLを生成する関数を作成する

予約投稿のURLを生成する関数を定義します。この関数は投稿IDを引数に取り、その投稿が予約投稿である場合にURLを構築して返します。

// 予約投稿のURLを生成する関数
function get_scheduled_permalink($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に変更します。

注意点とカスタマイズ

予約投稿のURLを表示するためのカスタムカラムを追加する際の注意点やカスタマイズ方法について説明します。

  • URLの構造をカスタマイズできます。例では/年/月/日/投稿ID/という構造を使用していますが、必要に応じて変更できます。
  • カスタムパーマリンク構造を使用している場合は、その構造に合わせてget_scheduled_permalink関数を修正する必要があります。

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

動作確認

functions.phpファイルに追加し「ファイルを更新」すると、投稿記事一覧のページに「予約投稿URL」のカラムが追加され、URLが表示されるようになっていればOKです。

不要な場合は表示オプションにある「予約投稿URL」のチェックを外して下さい。

まとめ

いかがでしたか?

今回の記事では、WordPress管理画面の投稿一覧に予約投稿のURLを表示するカスタムカラムを追加する方法を紹介しました。

この方法を使うことで、予約投稿のURLを簡単に確認でき、作業効率が多少ですが向上するかと思います。
カスタムパーマリンク構造に合わせたカスタマイズも可能なので、自分のサイトに合った形に調整してみてください。

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