WordPress の備忘録 – Microsoft Clarity 研究所 https://clarity.kosgis.com Microsoft Clarity(マイクロソフト クラリティ)の機能や可能性を探っています Thu, 23 Jan 2025 13:34:19 +0000 ja hourly 1 https://wordpress.org/?v=6.7.2 https://clarity.kosgis.com/wp-content/uploads/2024/01/cropped-HEm0sWv4_400x400-32x32.jpg WordPress の備忘録 – Microsoft Clarity 研究所 https://clarity.kosgis.com 32 32 SEO SIMPLE PACK の noindex を元にしたシンプルなサイトマップを生成するプラグインをつくりました https://clarity.kosgis.com/blog/seo-simple-pack-sitemap/ Thu, 23 Jan 2025 12:56:24 +0000 https://clarity.kosgis.com/?p=1054

SEO SIMPLE PACKのnoindex設定を反映したシンプルなサイトマップ生成プラグインを開発しました。投稿タイプやタクソノミーのindex/noindex状況を確認し、noindex設定された投稿やタクソノミーを自動的にサイトマップから除外します。]]>

ごめんください。コスギです。

SWELL で有名な了さんのプラグイン「SEO SIMPLE PACK」を拡張し、サイトマップを自動生成するためのプラグインを開発しました。

公式プラグインにはなっていないので、使えそうなら使ってください、という感じ。案件として使っているので、それなりにメンテはします。

作ろうと思ったきっかけ

SEO SIMPLE PACK は国産のシンプルなSEOプラグインとして、使いやすさが魅力です。しかし、サイトマップ機能は備わっておらず、別途プラグインを入れるか自前で生成しないといけませんでした。

また、「noindex」設定を反映させた柔軟なサイトマップが欲しかったため、SEO SIMPLE PACK で noindex にした投稿やタクソノミーをサイトマップに含めないようにして、自動的にアップデートされるシンプルなサイトマップを手軽に導入できる仕組みが必要でした。

そこで、SEO SIMPLE PACK の noindex 設定をそのまま利用しつつ、WordPress の「パーマリンク構造」や「投稿タイプ」「タクソノミー」などに応じて自動生成するサイトマッププラグインを作成しました。

プラグインの主な特徴

noindex 設定を尊重

  • 「SEO SIMPLE PACK」で noindex が設定された投稿やタクソノミーを、自動的にサイトマップから除外します。
  • カスタム投稿タイプやタームごとの noindex 設定にも対応します。

サイトマップの構成をシンプル化

  • /sitemap.xml へのアクセスでサイトマップインデックスを生成し、そこから各年別・投稿タイプ別・タクソノミー別のサイトマップファイルへリンク。
  • 大規模サイトにも耐えられるように年別のURLを分割していますが、余計なオプションは極力排除。

軽量&拡張しやすいコード構成

  • WordPress のフックを使って動的にXMLを吐き出すだけなので、速度への影響は最小限。
  • クラスごとに処理を分割しているため、開発者が機能を差し替え・拡張しやすくなっています。

SEO SIMPLE PACK 本体との連携

  • 管理画面の「設定」→「Sitemap Settings」を開くと、
    • noindex が適用されている投稿やタームの一覧
    • 投稿タイプ・タクソノミーごとの index/noindex 設定状況を確認でき、SEO SIMPLE PACK本体の該当設定画面へジャンプできます。

使い方

ダウンロード

前提条件

  • WordPress 5.0以上(PHP 7.4以上推奨)
  • 「SEO SIMPLE PACK」プラグインが有効化済みであること

インストール

  • 管理画面の「プラグイン」の「新規追加」画面で zip ファイルをアップロード
  • 管理画面の「プラグイン」から「SEO SIMPLE PACK Sitemap」を有効化

基本的な設定

  • 「設定」→「Sitemap Settings」にアクセスすると、投稿タイプやタクソノミーの index/noindex 状況が一覧表示されます。
  • noindex を切り替えたい場合は、各リンクからSEO SIMPLE PACKの「一般設定」ページへ飛び、投稿タイプ/タクソノミーのインデックスをON/OFFしてください。

サイトマップの確認

  • /sitemap.xmlにアクセスするとサイトマップインデックスが表示されます。
  • 投稿、固定ページ、年別投稿、カテゴリー、タグなど、noindexじゃないものだけ自動的に反映されます。

今後の展望

  • ページネーション対応
    大規模サイトでは1年分の投稿でも多い場合があるため、サイトマップをさらに細分化(月別など)できるようにしたいですね。5万件の限度もありますし。
  • 翻訳対応
    シンプルなので問題ないとは思うのですが、英語のみなので多言語対応できたらと思っています。
  • 重要度と更新頻度対応
    サイトマップの重要度と更新頻度には対応していません。それらが必要なら他のプラグインでもいいかなと思っているのですが、noindex を引き継げるのが良いので検討します。
  • 公式プラグインへの登録
    これは憧れみたいなものです。

参考リンク

]]>
WordPress のメディア一覧をファイルサイズでソートする https://clarity.kosgis.com/blog/sort-by-media-size/ Thu, 28 Nov 2024 02:50:50 +0000 https://clarity.kosgis.com/?p=869

ページ速度の改善には、メディアファイルのサイズ順に並べ替え、最適化することが効果的です。大きな画像や動画は圧縮やリサイズを行い、読み込み時間を短縮。ユーザーエクスペリエンス向上とSEOにつながります。]]>

はい、ごめんください。Clarity 大好きコスギです。最近は WordPress のリニューアル案件のご相談をいただいてウレシイです。

リニューアル案件では「今までよくわからずに写真を撮ったものそのまま使ってました」ということはザラにあります。とはいえ、すべてではないので大きいものくらいはなんとかしたいですよね。

コピペで使えるスニペット

そんなわけで、ChatGPT とアレコレ話してまとめたスニペットがこちら。Code Snippets で追加すれば使えます。翻訳関数を通してないこともあり、プラグイン化するほどでもないかな……。

// メディアファイルの一覧表示調整
add_filter( 'manage_media_columns', function ( $posts_columns ) {
    $posts_columns['filesize'] ='ファイルサイズ';
    return $posts_columns;
});

// メディアファイルのカスタムカラムにデータを表示
add_action( 'manage_media_custom_column', function ( $column_name, $post_id ) {
    if ( 'filesize' !== $column_name ) {
        return;
    }
    // 保存済みのファイルサイズを取得
    $file_size = get_post_meta( $post_id, '_wp_attached_file_size', true );
	if ( ! empty( $file_size ) ) {
        echo size_format( $file_size, 2 );
    } else {
        echo __( 'Unknown' );
    }
}, 10, 2 );


// ファイルサイズでソートを有効化
add_filter( 'manage_upload_sortable_columns', function ( $columns ) {
    $columns['filesize'] = 'filesize';
    return $columns;
});

// ソート用クエリをカスタマイズ
add_action( 'pre_get_posts', function( $query ) {
    global $pagenow;
    // メディアライブラリのメインクエリにのみ適用
    if ( is_admin() && $query->is_main_query() && 'upload.php' === $pagenow ) {
        $orderby = $query->get( 'orderby' ); // 現在の並び替え条件を取得

        if ( 'filesize' === $orderby ) {
            $query->set( 'meta_key', '_wp_attached_file_size' ); // メタキーを指定
            $query->set( 'orderby', 'meta_value_num' );         // 数値としてソート
        }
    }
} );

// ファイルサイズを保存(初回保存時やアップデート時)
add_action( 'add_attachment', 'update_filesize_meta' );
add_action( 'edit_attachment', 'update_filesize_meta' );
function update_filesize_meta( $post_id ) {
    $file_path = get_attached_file( $post_id );
    $bytes = filesize( $file_path );
    if ( false !== $bytes ) {
        update_post_meta( $post_id, '_wp_attached_file_size', $bytes );
    }
}

// 一括処理で既存のファイルサイズを保存
function batch_save_file_sizes() {
    $attachments = get_posts( [
        'post_type'      => 'attachment',
        'posts_per_page' => -1,
    ] );

    foreach ( $attachments as $attachment ) {
        $file_path = get_attached_file( $attachment->ID );
        $file_size = filesize( $file_path );

        if ( false !== $file_size ) {
            update_post_meta( $attachment->ID, '_wp_attached_file_size', $file_size );
        }
    }
    echo 'ファイルサイズの保存が完了しました!';
    die(); // 実行後スクリプトを停止
}
// URLで `?run_batch=1` を追加して実行
if ( isset( $_GET['run_batch'] ) ) {
    batch_save_file_sizes();
}

あまり関数を使わない派。ご利用は自己責任でどうぞ。

WordPress のメディアの一覧でファイルサイズを表示させる+並び替える
並び替えたら1ページ(20件)で合計140MBくらいありました。

上記のスニペットをつかうポイント

バッチ処理して _wp_attached_file_size をメタ情報に追加しておく

ソートするための情報が必要なので、バッチ処理してメタ情報に追加してください。

[ウェブサイトのトップページURL]/?run_batch=1 にアクセスすれば自動的に終わります。たぶん管理画面のURLでもイケるんじゃないでしょうか。

管理画面のみ有効にしておく

外部で動かすことはないので、管理画面のみ実行できるようにしておきましょう。

改造したい場合は ChatGPT と相談してみてください

備忘録のためにつくったので、「以下の WordPress のスニペットがどのような機能として動いているのか、わかりやすく教えてください。また、ここに[追加したい機能]という機能を追加してください。」として、上記のスニペットをコピペするだけです。便利な世の中ですね。

心配な方は、セキュリティ的なところも確認してみてください。

]]>