Shifter では、テーマの functions.php にフィルターを追加することで、静的化対象の URL に任意の URL を追加できます。WordPress REST API のエンドポイントや、カスタム投稿タイプのページネーション URL など、通常の静的化プロセスで含まれない URL を追加する際に使用します。
使い方
functions.php に以下を追加します。
function my_append_urls( $urls ) {
$urls[] = home_url('/追加したいパス/');
return $urls;
}
add_filter( 'ShifterURLS::AppendURLtoAll', 'my_append_urls' );
制限事項
- URL は WordPress 内に存在する必要があります(外部 URL は取得できません)
- URL は
home_url()で生成する必要があります - URL はトレイリングスラッシュで終わるか、以下のサフィックスで終わる必要があります
- URL は
/index.htmlとして生成されます - Content-Type は Shifter が WordPress から取得したものと同じになります(例:
/wp-json/wp/v2/posts/はcontent-type: application/jsonとして配信)
許可されるファイルサフィックス: .html .xml .rss .rdf .atom .css .js .json
動作確認方法
WordPress 起動中にトップページの URL へ ?urls、?urls=1、?urls=2 … を付与してアクセスすると、静的化対象の URL 一覧を確認できます。フィルターで追加した URL は "link_type": "from_filter_hook" として表示されます。
curl -s https://your-site.on.getshifter.io/?urls | jq .
{
"items": [
{
"link_type": "from_filter_hook",
"post_type": "",
"link": "https://your-site.on.getshifter.io/wp-json/wp/v2/posts/",
"path": "/wp-json/wp/v2/posts/"
}
]
}
サンプルコード
A. REST API エンドポイントを追加する
function my_append_urls( $urls ) {
$urls[] = home_url('/wp-json/wp/v2/posts/');
return $urls;
}
add_filter( 'ShifterURLS::AppendURLtoAll', 'my_append_urls' );
B. 複数の URL をまとめて追加する
function my_append_urls( $urls ) {
$states = [
'Alabama',
'Arizona',
// ...
'Wisconsin',
'Wyoming',
];
foreach ( $states as $slug ) {
$urls[] = home_url("/states/{$slug}/");
}
return $urls;
}
add_filter( 'ShifterURLS::AppendURLtoAll', 'my_append_urls' );
C. カスタム投稿タイプのページネーション URL を追加する
ページネーション URL は自動的に静的化対象に含まれないzため、以下のように動的に生成して追加します。
function my_append_urls( $urls ) {
$limit = get_option('posts_per_page');
$args = array(
'post_type' => 'product_service',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids',
'no_found_rows' => true,
);
$the_query = new WP_Query($args);
if ($the_query->have_posts()) {
$last_page = ceil(count($the_query->posts) / $limit);
for ($i = 2; $i <= $last_page; $i++) {
$urls[] = home_url('/product_service/page/' . $i . '/');
}
}
return $urls;
}
add_filter( 'ShifterURLS::AppendURLtoAll', 'my_append_urls' );