ワードプレスのget_post_permalinkフィルタの使用方法・解説

概要

get_post_permalinkフィルタは、WordPressで特定の投稿のパーマリンクを取得する際に使用されるフィルタです。このフィルタを使用することで、投稿やページのURLをカスタマイズしたり、特定の条件に基づいてURLを変更することができます。例えば、カスタム投稿タイプの投稿ページのパーマリンクを取得する際に非常に便利です。このフィルタは以下のような機能を実装する際によく使われます:

  1. カスタム投稿タイプのURLを変更する
  2. 投稿のリダイレクト時にパーマリンクを変更する
  3. URL生成時のカスタムロジックを追加する
  4. 特定の条件下でパーマリンクを無効化する
  5. マルチサイト環境でのパーマリンク処理
  6. SEOを考慮したURL構造の実装
  7. 外部APIからのデータを利用してURLを変更する
  8. 特定のユーザー role に基づく URL の制限

構文

add_filter('get_post_permalink', 'your_custom_function', 10, 2);

パラメータ

  • $permalink (string): デフォルトの投稿のパーマリンク。
  • $post (WP_Post): 該当する投稿のWP_Postオブジェクト。

戻り値

  • (string): 変更されたパーマリンク。

関連する関数

https://refwp.com/?titleonly=1&s=get_post_permalink

使用可能なバージョン

WordPress 3.0.0以降で使用可能です。

コアファイルのパス

wp-includes/post.php

この関数のアクションでの使用可能性

アクション 使用例
mu_plugin_loaded
registered_post_type
plugins_loaded
wp_roles_init
setup_theme
after_setup_theme
set_current_user
init
register_sidebar
wp_loaded
send_headers
parse_query
pre_get_posts
wp
template_redirect
get_header
wp_head

サンプルコード

サンプル1: カスタム投稿タイプのパーマリンクを変更する

add_filter('get_post_permalink', 'change_custom_post_type_permalink', 10, 2);
function change_custom_post_type_permalink($permalink, $post) {
    if ($post->post_type === 'custom_post_type') {
        return home_url('/custom-post/' . $post->ID);
    }
    return $permalink;
}

このコードは、カスタム投稿タイプ custom_post_type の投稿に対して、パーマリンクを /custom-post/{投稿ID} の形式に変更します。

サンプル2: 投稿のリダイレクトに基づくパーマリンク変更

add_filter('get_post_permalink', 'redirect_post_permalink', 10, 2);
function redirect_post_permalink($permalink, $post) {
    if ($post->ID == 123) { // 投稿IDが123の場合
        return home_url('/redirected-post/');
    }
    return $permalink;
}

このコードは、投稿IDが123の投稿のパーマリンクを /redirected-post/ に変更します。

サンプル3: 特定の条件下でパーマリンクを無効化

add_filter('get_post_permalink', 'disable_permalink_for_specific_user', 10, 2);
function disable_permalink_for_specific_user($permalink, $post) {
    if (is_user_logged_in() && current_user_can('administrator')) {
        return '#'; // 管理者ユーザーのパーマリンクを無効化
    }
    return $permalink;
}

このコードは、ログイン中の管理者ユーザーに対して、該当投稿のパーマリンクを無効にします。

サンプル4: SEO対策に基づくURLのカスタマイズ

add_filter('get_post_permalink', 'seo_friendly_permalink', 10, 2);
function seo_friendly_permalink($permalink, $post) {
    $new_permalink = str_replace(' ', '-', $post->post_title);
    return home_url('/seo-friendly/' . $new_permalink);
}

このコードは、投稿タイトルをスペースをハイフンに変換し、/seo-friendly/ プレフィックスを追加した形式のパーマリンクを生成します。

サンプル5: 外部APIに基づくURL変更

add_filter('get_post_permalink', 'api_based_permalink_change', 10, 2);
function api_based_permalink_change($permalink, $post) {
    $api_response = wp_remote_get('https://api.example.com/post/' . $post->ID);
    if (is_wp_error($api_response)) {
        return $permalink;
    }

    $data = json_decode(wp_remote_retrieve_body($api_response), true);
    if (isset($data['new_permalink'])) {
        return $data['new_permalink'];
    }
    return $permalink;
}

このコードは、外部APIから取得した新しいパーマリンクを適用します。APIがエラーを返した場合は、元のパーマリンクを使用します。

この関数について質問する


上の計算式の答えを入力してください