概要
get_post_permalink
フィルタは、WordPressで特定の投稿のパーマリンクを取得する際に使用されるフィルタです。このフィルタを使用することで、投稿やページのURLをカスタマイズしたり、特定の条件に基づいてURLを変更することができます。例えば、カスタム投稿タイプの投稿ページのパーマリンクを取得する際に非常に便利です。このフィルタは以下のような機能を実装する際によく使われます:
- カスタム投稿タイプのURLを変更する
- 投稿のリダイレクト時にパーマリンクを変更する
- URL生成時のカスタムロジックを追加する
- 特定の条件下でパーマリンクを無効化する
- マルチサイト環境でのパーマリンク処理
- SEOを考慮したURL構造の実装
- 外部APIからのデータを利用してURLを変更する
- 特定のユーザー 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がエラーを返した場合は、元のパーマリンクを使用します。