Skip to content

サイトマップから外部パーマリンクを除外 - #40

Open
akawallie wants to merge 2 commits into
mainfrom
issue-39
Open

サイトマップから外部パーマリンクを除外#40
akawallie wants to merge 2 commits into
mainfrom
issue-39

Conversation

@akawallie

Copy link
Copy Markdown
Member

概要

外部パーマリンクが設定されている投稿・添付ファイルが taro-sitemap のサイトマップに含まれないように対応しました。

Closes #39

@akawallie
akawallie requested a review from fumikito June 17, 2026 21:11
@claude

claude Bot commented Jun 17, 2026

Copy link
Copy Markdown

AI トリアージ: PR #40

リスク: 🟡 中(外部依存・テスト欠如)
スコープ: `scope:php` `scope:config`
不足: `needs-unittest` `needs-manual-test`

サマリー

  • 外部パーマリンクが設定された投稿を tsmap_sitemap_results フィルター経由でサイトマップから除外する機能を追加。
  • tsmap_sitemap_results フィルター名が taro-sitemap 側の実装と一致しているか未検証であり、名前が違えばサイレントに無効化される。
  • 新規パブリック関数に対してユニットテストが追加されていない。
詳細レビュー

テスト要否

  • 🔴 テスト必須(未実装): tsep_filter_sitemap_results() — 新規パブリック関数(ルール1適用)
  • ⚪ テスト不要: package-lock.json — ビルドツール設定のみ

レビュワーが確認すべき箇所

  1. includes/templates.php:107tsmap_sitemap_results フィルター名が taro-sitemap プラグイン側で実際に定義されているか確認必須。フック名が誤っている場合、フィルターは無音で無効になる。taro-sitemap のソースまたはドキュメントへの参照リンクをPR説明に追記してほしい。

  2. includes/templates.php:107add_filter() の第3引数(priority)が省略されデフォルト10。taro-sitemap 側でキャッシュや後処理が優先度10より前に走る場合、除外が効かない可能性がある。意図的であれば問題ないが明示的に指定するとより安全。

  3. includes/templates.php:108–115tsep_get_url( $post ) はポストごとにポストメタを読み込む可能性がある。サイトマップが数百件規模の場合、N+1 クエリとなりうる。tsep_get_url() の内部実装(メタキャッシュ利用の有無)を確認してほしい。

  4. package-lock.json:8 — ライセンスが LGPL-3.0-or-laterGPL-3.0-or-later に変更されている。プラグイン本体のライセンス意図と一致しているか要確認。また対応する package.json の差分がこの PR に含まれていない点も不自然。

  5. package-lock.jsonhuskylint-staged が devDependencies に追加されているが、これらの設定ファイル(.husky/lint-staged config)がリポジトリに存在するか、また package.jsonscriptsprepare フックが追加されているか確認が必要。

設計上の懸念

  • クロスプラグイン依存の無宣言: taro-sitemap との連携が追加されたが、readme.txt やチェンジログにその旨が記載されていない。taro-sitemap が導入されていない環境では add_filter() 自体は無害だが、意図的な依存として文書化すべき。
  • フィルターの配置: 現在 tsep_filter_sitemap_resultstemplates.php に置かれている。このファイルがフロントエンド表示に限定されているなら、サイトマップ生成(REST/cron文脈含む)でも templates.php が確実に読み込まれるかアーキテクチャ上の確認が必要。

🤖 AI トリアージ完了(2026-06-17)

@fumikito fumikito left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

$resultsはたぶん1,000件以上あり、n+1で負荷が高いかもしれないので、SQLにした方がいいかもしれません。

// post_idのin句を作成
$post_ids = array_map( function( $post ) {
    return $post->ID;
}, $results );
$in_clause = implode( ',', $post_ids );
// tsep_get_urlが設定されている投稿IDのリストを作る
global $wpdb;
$query = <<<SQL
    SELECT post_id FROM {$wpdb->postmeta}
    WHERE meta_key = '_external_permalink'
      AND post_id IN ({$in_clause})
      AND meta_value != ''
SQL;
// 投稿IDを数値にキャスト(get_colで返ってくるのは文字列なので)
$should_excludeds = array_map( 'intval', $wpdb->get_col( $query ) );
// $resultsから$should_excludesに含まれているものを除外
return array_values( array_filter( $results, function( $post ) use ( $should_excludes ) {
    return ! in_array( $post->ID, $should_excludes, true );
} ) );

@fumikito

Copy link
Copy Markdown
Member

@claude 私が残したレビューの指摘あってますかね。意見をお願いします。

@claude

claude Bot commented Jun 23, 2026

Copy link
Copy Markdown

Claude finished @fumikito's task in 0s —— View job


I'll analyze this and get back to you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

taro-sitemap のサイトマップ結果から外部パーマリンクを除外する

2 participants