カスタム投稿タイプを使用せず、個別のデータベーステーブルを使用するプラグインを開発しています。これは、ユーザーがコースをサブスクライブできるさまざまなコース詳細ページへのリンクを含むコースのリストを表示するプラグインです。
現在の状態では、ショートコードを使用して、カスタムページテンプレート(page-courses.php)を含むページにプラグインデータを取得しています。
the_title()
プラグインが表示するページ(コースのリスト、フォームのあるコース詳細ページ、フォーム送信の成功ページ)に応じて、動的に変更したいと思います。しかし、次のフィルターを使用してそれを行うと、フッター内の他のページへのリンクも変更されます。
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
編集する
footer.phpにフッターリンクを含む関数があるwp_nav_menu()
ので、[外観]> [メニュー]でフッターリンクを定義できます。ただし、上記のフィルターを使用すると、フッター内のすべてのリンクも「カスタムタイトル」に変更されます。しかし、私はページのタイトルを変更したいだけで、フッターのメニューリンクには影響しません。
条件付きタグを追加しようin_the_loop()
としても、フッターリンクは影響を受けますが、ループにはありません。
<?php
add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
if ( in_the_loop() ) {
add_filter( 'the_title', 'custom_page_title' );
}
}
function custom_page_title() {
return 'Custom Title';
}
それはこの質問に似ています:影響を受けるリンクがフッターにあり、機能しないというだけで、navのthe_title問題をフィルタリングしますin_the_loop()
。
the_title()
表示されている現在のページのタイトルのみに影響を与え、フッターのリンクには影響を与えずに、どのように変更できますか?
編集2-ソリューション
だから私は最終的にそれを機能させました:
<?php
add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
add_filter( 'the_title', 'wpse83525_filter_the_title', 10, 2 );
}
function wpse83525_filter_the_title( $title, $id ) {
if ( 'page-listcourses.php' == get_post_meta( $id, '_wp_page_template', true ) ) {
return 'Custom Title';
}
return $title;
}
ファイルpage-listcourses.phpは、「コース」という名前の静的ページに割り当てたカスタム投稿テンプレートです。
静的ページの名前とカスタム投稿テンプレートのファイル名が同じだったので、以前は機能しなかったと思います。
in_the_loop()
が起動されるtrue
たびに設定されthe_post()
ます。コアを深く掘り下げて、ナビゲーションメニュー自体がループであることがわからない場合は、途中のどこかでwp_nav_menu()
ループがインスタンス化されて、in_the_loop()
が返されると思いますtrue
。