web-dev-qa-db-ja.com

ページタイトルのみを変更し、内の投稿タイトルは変更しない

ショートコードを使用して、CPTから複数の投稿を問い合わせたページがあります。そのため、このページは一般ユーザーにとってはアーカイブページの一種です。

Page Title
  - CPT Post Title #1
  - CPT Post Title #2
  - CPT Post Title #3

特定の条件で、CPT投稿タイトルではなくページタイトルのみを変更したい。私は試した:

function wpse_change_page_title( $title ) {
   //if( condition matched ) {
       return 'Test ' . $title;
   //}
}
add_filter( 'the_title', 'wpse_change_page_title' );

しかし、それはCPTの投稿タイトルを変更しています。

Page Title
  - Test CPT Post Title #1
  - Test CPT Post Title #2
  - Test CPT Post Title #3

CPT投稿タイトルではなくページタイトルのみを変更するにはどうすればよいですか。

Test Page Title
2
Mayeenul Islam

私はあなたが話しているページのタイトルはメインクエリからのページのタイトルだと思います。 the_title() filter(そしてそれに関してはthe_content() filter)はクエリに関係なくすべてのそれぞれのテンプレートタグをターゲットにします。

これを回避するには、メインクエリと特定のページのみをターゲットにします。

あなたはあなたのフィルタの中で以下を試すことができます

if ( in_the_loop() && is_page( 'specific page' ) ) {

    // Do what you need to do

}

編集

私はちょうどこれを考えた、それをテストしていない、しかしあなたは既知の静的タイトルに対してフィルタの中のあなたのタイトルをチェックしてそれからそれに従って何かをすることができる

例:

if ( $title == 'My known title' ) {

    // Do something with the title

}
2
Pieter Goosen

私はあなたのプロジェクトを理解しているかどうかは完全にはわかりませんが、wp_titleフィルタの代わりに the_title フィルタを使うべきだと私には思えます。これは、ページ上の投稿のタイトルではなく、ページタイトルを出力するwp_title()関数によって起動されます。何かのようなもの:

function wpse_change_page_title( $title ) {
   if(is_page('some_page')) {
       return 'Test ' . $title;
   }
}
add_filter( 'wp_title', 'wpse_change_page_title' );
0
s_ha_dum

the_titleの2番目の引数は常に投稿IDです。これを使って。

add_filter( 'the_title', function( $title, $post_id) {

    $post = get_post( $post_id );

    if ( ! $post or 'your_cpt' !== $post->post_type )
        return $title;

    return 'Test ' . $title;
}, 10, 2 );
0
fuxia