サポート » テーマ » シングルページのtitleを自由に付けたい

  • 解決済 ikesu

    (@ikesu)


    WordPress4,4以降のシングルページのtitleにカスタムフィールドの値の出力と、特定のタグで表示する文字、カテゴリ名を出力したいと思っています。

    実現したいのは4つの出力の複合になります
    【タグfogeの時のみ表示する文字】
    カスタムフィールドに設定したタイトル(st_titleなければ記事タイトル)
    【所属カテゴリ(1つ)】
    | サイト名

    シングルページのtitleをこのようにしたいと思っています
    【タグfogeの時の表示文字】カスタムフィールド(st_titleなければ記事タイトル)【所属カテゴリ】 | サイト名

    WordPress4.4以前はtitleタグに直接コードを差し替えて使用していました。

    <title><?php 
    $text = get_field('st_title');
    if($text) :
    echo $text;
     ?> <?php 
    endif;
     ?><?php the_title(); ?> | 
    <?php
    $cats = get_the_category();
    $exclude = array( 42, );
    reset( $cats );
    while ( $cats ) {
      if ( ! in_array( $cats[0]->cat_ID, $exclude ) )
        break;
      array_shift( $cats );
    }
    if ( $cats ) 
      echo $cats[0]->cat_name;
    else
      echo '未所属';
    ?>
     | サイト名</title>

    以前、教わったコードです
    【カテゴリfogeの時のみ表示する文字】
    記事タイトル
    って何?
    【所属カテゴリ(1つ)】
    サイト名

    このコードで下記が表示されます
    【カテゴリfogeの時の文字】記事タイトルって何?【所属カテゴリ(1つ)】サイト名

    function change_document_title_parts( $title ){
    	if ( is_single() ) {
    		$title['title'] = sprintf( '%s%sって何?【%s】%s',
    			in_category( 'hoge' ) ? 'fogeの時のみ表示する文字' : '',
    			$title['title'],
    			( $cat = get_the_category() ) ? get_cat_name( $cat[0]->term_id ) : '',
    			$title['site']
    		);
    		unset( $title['site'] );
    	}
    	return $title;
    }
    add_filter( 'document_title_parts', 'change_document_title_parts' );

    上記のようなコードで
    【タグfoge時の表示文字】カスタムフィールド(なければ記事タイトル)【所属カテゴリ】 | サイト名
    を表示されるようにしたいです。

    複雑なtitleになり恐縮ですがfunctions.phpに追加するコードを教えて頂けませんでしょうか。
    よろしくおねがいします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • 同じ内容で立てたトピックが消えてしまっていたので新しいトピックとして立て直しました
    よろしくおねがいします。

    • この返信は3週、 4日前にikesuが編集しました。理由: 新たに立て直してしまったため
    • この返信は3週、 4日前にikesuが編集しました。
    • この返信は3週、 4日前にikesuが編集しました。
    DRILL LANCER

    (@rickaddison7634)

    下記のようにすればいけると思います。

    function ikesu_document_title_parts( $title ) {
    	if ( is_single() ) {
    		$title['title']  = '';
    		$title['title'] .= has_tag( 'hoge' ) ? '【hogeの時のみ表示する文字列】' : '';
    		$title['title'] .= get_field( 'st_title' ) ? get_field( 'st_title' ) : get_the_title();
    
    		$cats    = get_the_category();
    		$exclude = array( 42 );
    		reset( $cats );
    		while ( $cats ) {
    			if ( ! in_array( $cats[0]->cat_ID, $exclude, true ) ) {
    				break;
    			}
    			array_shift( $cats );
    		}
    		$title['title'] .= $cats ? '【' . $cats[0]->cat_name . '】' : '【未所属】';
    		$title['title'] .= ' | ' . $title['site'];
    		unset( $title['site'] );
    	}
    	return $title;
    }
    add_filter( 'document_title_parts', 'ikesu_document_title_parts' );

    返信ありがとうございます。

    カスタムフィールドがない時の記事タイトルを残す・残さないかや除外カテゴリがあったなど
    提示したコードと質問に食い違いが複数あったにも関わらず意図を組んでくださりありがとうございます。

    理想の表示になりました。
    ありがとうございました!

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • このトピックに返信するにはログインが必要です。