サポート » テーマ » titleに任意の文字やカテゴリ名を出力したい

  • 解決済 ikesu

    (@ikesu)


    WordPress4,4以降のシングルページのtitleに任意の文字やカテゴリ名を出力したいと思っています。

    実現したいtitle表示は下記の5項目を複合したものになります

    【カテゴリfogeの時のみ表示する文字】
    記事タイトル
    って何?
    【所属カテゴリ(1つ)】
    サイト名

    旧バージョンのWordPressでは下記のコードをsingle.phpのtitleタグにしていました。

    <title><?php if(in_category(hoge)) : ?>
    【終了しました】
    <?php endif; ?><?php the_title(); ?>って何?【<?php $cat = get_the_category(); ?>
    <?php $cat = $cat[0]; ?>
    <?php echo get_cat_name($cat->term_id); ?>】サイト名</title>

    この方法ではtitleタグが変更された現在のWordPressでは上手くいきませんでした。

    調べている段階でカスタムフィールドを使って任意のタイトルにする方法は分かったのですが、
    まとめて変更できる上記の方法が望ましいです。

    function mypace_custom_title( $title ){
      if( is_singular() ){ 
         $post_id = get_the_ID();
         $my_title = get_post_meta( $post_id, 'カスタムフィールド名', true ); 
         if( $my_title ){ 
          $title['title'] = esc_html( $my_title ); 
          return $title;
        }
      }
      return $title; 
    }
    add_filter( 'document_title_parts', 'mypace_custom_title', 10, 2 ); 

    titleの変更を実現するにはpre_get_document_titleを利用すると良いらしいのですが
    知識が足りずfunctions.phpへの記述方法がわかりません。

    複雑な条件で恐縮ですがシングルページのtitleに任意の文字やカテゴリ名を出力させる
    functions.phpに記入するコードを教えて頂けないでしょうか?

    よろしくおねがいします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • ishitaka

    (@ishitaka)

    こんにちは

    こんな感じではどういうことでしょうか。

    function change_document_title_parts( $title ){
    	if ( is_single() ) {
    		$title['title'] = sprintf( '%s%sって何?【%s】%s',
    			in_category( 'hoge' ) ? '【終了しました】' : '',
    			$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' );
    トピック投稿者 ikesu

    (@ikesu)

    返信ありがとうございます
    思ったとおりのtitle表示になり感激しています

    titleタグについて数日悩んでいてWordPressのアップグレードを諦めようともしていましたが、これで心置きなくバージョンアップのための作業を続けることができるようになりました。

    本当にありがとうございました!

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「titleに任意の文字やカテゴリ名を出力したい」には新たに返信することはできません。