【SWELL】人気の無い古い記事を自動的にゴミ箱に移す方法

  • URLをコピーしました!

当ブログのコンテンツ・情報について、できる限り正確な情報を提供するように努めておりますが、正確性や安全性を保証するものではありません。
当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますので、予めご了承ください。

人気の無い古い記事を自動的にゴミ箱に捨てる方法を紹介します。

人気の無い記事を公開していると、サイト全体の価値が下がりSEOに悪影響を与えることもあります。他の記事の検索順位を下げてしまうこともあるので、人気のない古い記事はゴミ箱に捨ててしまいましょう。

SWELLのPV機能を使用するのでSWELL限定です。SWELL以外でも同様の機能があったり、プラグイン「WordPress Popular Post」でも同様のことができるかもしれませんが、本記事では対象外です。

WordPress環境
  • WordPressバージョン: 6.5.2
  • SWELLバージョン: 2.10.0
  • PHPバージョン: 8.1.22

バージョンが異なると本記事の内容が正常に動作しない可能性があります。また、プラグインの影響や、別途記述しているPHP、JavaScript、.htaccess等も影響する可能性があります。

目次

人気の無い古い記事を自動的にゴミ箱に移す方法

注意点

PVのリセット

「SWELL設定」→「リセット」から「PVのリセット」ができます。今回の方法はSWELL機能のPV数が一定数以下の記事を対象とするので、PVをリセット(PV=0)すると全ての記事がゴミ箱行きになりかねません。

PVのリセットは慎重にしてください。

リンク切れ

ゴミ箱行き対象の記事にリンクを貼っていると、リンク切れとなってしまいSEOに悪影響があることがあります。プラグイン「Broken Link Checker」などを利用して、自動的にリンク切れをチェックするシステムを構築することを推奨します。

Broken Link Checkerはサイトのパフォーマンスを低下させると紹介されることもありますが、Kode・Loomでも使用しているエックスサーバーのような高性能サーバーであれば微々たる負荷です。

手順

STEP
プラグイン「Advanced Cron Manager」をインストール

新規プラグイン追加から「Advanced Cron Manager」をインストール、有効化します。

Advanced Cron Manager
STEP
Cron Managerの設定を開く

WordPress管理画面左カラムの「ツール」→「Cron Manager」、もしくはインストール済みプラグイン一覧のAdvanced Cron Managerの「Cron Manager」をクリックします。

STEP
新規イベントを追加

Cron Managerの「新規イベント追加」をクリックします。

Add new event

新規イベントでフックに任意の名前(ここでは「move_old_posts_to_trash_hook」)、予約に任意の実行周期(ここでは「1日1回」)を設定し、Schedule eventをクリックします。

STEP
function.phpに記述追加

function.phpに下記コードを追記します。ここでは半年以上前に公開した記事かつ、PV数が10以下の記事を自動的にゴミ箱に移動する設定にしています。

//人気のない古い記事は自動ゴミ箱行き
function move_old_posts_to_trash() {
    $args = array(
        'post_type'      => 'post', //投稿のみ対象(固定ページとかは対象外)
        'post_status'    => 'publish', //公開中の記事のみ対象
        'posts_per_page' => -1, //上記を満たす全ての記事を処理対象とする
        'date_query' => array(
            array(
                'before'    => '-6 months', //半年以上前
                'inclusive' => true, //半年丁度も含める
            ),
        ),
        'meta_query' => array(
            array(
                'key'     => 'ct_post_views_byloos', //PVのカスタムフィールド
                'value'   => 10, //PV10を指定
                'compare' => '<=', //上記指定値「以下」を指定
                'type'    => 'NUMERIC',
            ),
        ),
        'fields'         => 'ids',
    );

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        foreach ($query->posts as $post_id) {
            wp_trash_post($post_id);
        }
    }
}

add_action('move_old_posts_to_trash_hook', 'move_old_posts_to_trash');

なお、半年以上前を変更するには'-6 months' を以下の通り変更してください。

削除対象期間記述備考
1日以上前'-1 day'単数形
2日以上前'-2 days'複数形(3日以降も同様)
1週間以上前'-1 week'単数形
2週間以上前'-2 weeks'複数形(3週間以降も同様)
1ヶ月以上前'-1 month'単数形
2ヶ月以上前'-2 months'複数形(3ヶ月以降も同様)
半年以上前'-6 months'当然複数形
1年以上前'-1 year'単数形
2年以上前'-2 years'複数形(2年以降も同様)
STEP
ゴミ箱を経由せず直接削除するには?

ゴミ箱に移さずに直接削除するには、wp_trash_post の代わりに wp_delete_post 関数を使います。

function move_old_posts_to_trash() {
    $args = array(
        'post_type'      => 'post', //投稿のみ対象(固定ページとかは対象外)
        'post_status'    => 'publish', //公開中の記事のみ対象
        'posts_per_page' => -1, //上記を満たす全ての記事を処理対象とする
        'date_query' => array(
            array(
                'before'    => '-6 months', //半年以上前
                'inclusive' => true, //半年丁度も含める
            ),
        ),
        'meta_query' => array(
            array(
                'key'     => 'ct_post_views_byloos', //PVのカスタムフィールド
                'value'   => 10, //PV10を指定
                'compare' => '<=', //上記指定値「以下」を指定
                'type'    => 'NUMERIC',
            ),
        ),
        'fields'         => 'ids',
    );

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        foreach ($query->posts as $post_id) {
            wp_delete_post($post_id, true); // trueを指定することで完全削除
        }
    }
}

add_action('move_old_posts_to_trash_hook', 'move_old_posts_to_trash');

まとめ

人気のない記事はサイト全体の価値を下げ、サイト全体のSEOに悪影響を及ぼすことがあります。

本来は自分の目でチェックし、公開停止ないしリライトしたほうが良いのですが、私のようにものぐさな性格の方は今回紹介したコードを試してみるのも良いかもしれません。

よかったらシェアしてね!
  • URLをコピーしました!
目次