私はカスタムの投稿タイプを使用せず、別々のデータベーステーブルを使用するプラグインを開発しています。これは、コースのリストをさまざまなコース詳細ページにリンクするリンクとともに表示するプラグインです。ここで、ユーザーはコースを購読することができます。
現状では、カスタムページテンプレート(page-course.php)を使って、プラグインデータをページに入れるためのショートコードを使用しています。
プラグインが表示するページ(コースのリスト、フォームを含むコース詳細ページ、フォーム送信成功ページ)に従って、the_title()
を動的に変更したいと思います。しかし、私が以下のフィルタでそれをするときはいつでも、フッターの他のページへのリンクも変わります:
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
Footer.phpにはwp_nav_menu()
のフッターリンクを含む関数があるので、Appearance> Menusで定義できます。しかし、上記のフィルタを使用すると、フッター内のすべてのリンクも「カスタムタイトル」に変わります。しかし、フッターのメニューリンクには影響を与えずに、ページのタイトルを変更するだけです。
条件付きタグ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()
を変更するにはどうすればよいですか フッター内のリンクには影響しません
それで私はついにそれを動かしました:
<?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は、 'Courses'という名前の静的ページに割り当てたカスタム投稿テンプレートです。
静的ページの名前とカスタム投稿テンプレートのファイル名が同じであったため、以前はうまくいかなかったと思います。
is_page_template()
条件を使用します。
if ( is_page_template( 'page-courses.php' ) ) {
// The current page uses your
// custom page template;
// do something
}
あなたはこの条件付きinsideあなたのフィルタコールバックを使うでしょう:
function wpse83525_filter_the_title( $title ) {
if ( is_page_template( 'page-courses.php' ) ) {
return 'Custom Title';
}
return $title;
}
add_filter( 'the_title', 'wpse83525_filter_the_title' );
今、あなたのページテンプレートを使用するページのタイトルだけを分離するために、あなたはthe_title
に渡される他のパラメータを利用することができます:$id
。タイトルが絞り込まれている投稿のIDがわかっているので、_wp_page_template
投稿メタを照会して、それがあなたのページテンプレートと同じであることを確認することができます。
function wpse83525_filter_the_title( $title, $id ) {
if ( 'page-courses.php' == get_post_meta( $id, '_wp_page_template', true ) ) {
return 'Custom Title';
}
return $title;
}
add_filter( 'the_title', 'wpse83525_filter_the_title', 10, 2 );
特に "Courses"ページをターゲットにしたい場合は、ページスラッグ'courses'
、またはページタイトル'Courses'
と共にis_page()
を使用してください。
function wpse83525_filter_the_title( $title ) {
if ( is_page( 'Courses' ) ) {
return 'Custom Title';
}
return $title;
}
add_filter( 'the_title', 'wpse83525_filter_the_title' );
ただし、page-courses.php
を カスタムページテンプレート に変更することをお勧めします。これにより、このプロセス全体がはるかに堅牢になります。
現在のページタイトルのみを編集する場合は、次のようにin_the_loop()
条件を使用します。
add_filter( 'the_title', 'modify_onpage_title', 10, 2);
function modify_onpage_title( $title , $id = null ) {
if(!in_the_loop()){
// returns early if not relevant (as in custom menu loops)
return $title;
}
// Tweak your title
$title = "Yolo! ". $title;
return $title;
}
コンディショナルタグ を使用して、the_title()
が必要なページでのみ変更されるようにしてください。
is_page_template()
は機能しますが、この種のページを生成するすべてのコードを1つのファイルに含めるには、この種のコードをページテンプレート自体に含めることをお勧めします。