web-dev-qa-db-ja.com

投稿のタイトルにテーマのカスタム変数を追加する方法

投稿タイトルにカスタムフィールドを追加しようとしています( サンプルページ )。そうするために、私は この前の質問 で与えられた指示に従っています、しかし変数は予想通りタイトルに現れていません。実際には、まったく同じタイトルが表示されます。任意の助けがいただければ幸いです。

前の指示は、次のコードがfunctions.phpに追加されるべきであることを示します:

function wpse_224340_document_title($title){
    global $post; // make sure the post object is available to us
    if(is_singular()){ // check we're on a single post
      $release_author = get_post_meta(get_the_ID(), "release_author", true);
      if($release_author != "")
        { $title["title"].= " (" . $release_author. ")";}
    }
    return $title;
}
add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });

私の場合の変数は propertyysq であり、 release_author ではありません。しかし、単純な検索/置換は以下のようになりました...

このコードを実装するとどうなりますか?

現在のページタイトルは次のとおりです。HS0525 - Chaweng Noi - Horizon Homes Koh Samuiこのタイトルは、Wordpressプラグイン「Yoast SEO」によって自動的に挿入されました。ただし、この自動タイトル挿入を無効にして上記のコードを挿入した後、ページに挿入されたタイトルは前のページのタイトルと同じになります。HS0525 - Chaweng Noi - Horizon Homes Koh Samui

考えられるエラーの原因

エラーの原因として考えられる#1 :それ自身の<title>をページに押し付けている前述のプラグイン/メカニズム。これが原因かどうか私は現在調査中です。プラグインを完全に削除しないようにしたいのですが、そうする必要があるかもしれません。

考えられるエラーの原因#2 :自分のテーマや機能に対応するように、次の行を編集する必要がありますか。

$release_author = get_post_meta(get_the_ID(), "release_author", true);

次の行に置き換えてみましたが、うまくいきませんでした。

$propertysq = ale_get_meta('propertysq');

私は注意すべきです:

  • このサイトにはPHPエラーとdump varsを簡単に見ることができる適切なテスト環境設定がありません。
  • 前回の回答によると、私はheader.phpの<title>タグをコメントアウトすることも覚えていました。

編集:これは私がfunctions.phpに挿入した正確なコードです:

add_filter("document_title_parts", "wpse_224340_document_title");
function wpse_224340_document_title($title){
    global $post; // make sure the post object is available to us
    if(is_singular()){ // check we're on a single post
      $propertysq = get_post_meta(get_the_ID(), "propertysq", true);
      if($propertysq != "")
        { $title["title"].= " (" . $propertysq. ")";}
    }
    return $title;
}
add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
3
cag8f

私はあなたがタイトルにpropertysqカスタムフィールド/投稿メタを使いたいと思い、あなたはYoast SEOを使います。 (間違っていたら訂正してください)

だから、これはあなたのfunctions.phpです

function wpse239252_hook_title($title) {
global $post; // make sure the post object is available to us
if(is_singular()){ // check we're on a single post
  $propertysq = get_post_meta(get_the_ID(), "propertysq", true);
  if($propertysq != "") { //check if not empty
    $title = $propertysq.' - '.$title;
  }
}
return $title;
}

add_filter('wpseo_title', 'wpse239252_hook_title', 15, 1);

これはあなたの与えられた例で1,002Sq Mt - HS0525 - Chaweng Noi - Horizon Homes Koh Samuiとしてあなたのタイトルにpropertysqフィールドを追加します、ここでpropertysq = 1,002Sq Mt

P.S:post_meta propertyysqを得るためには$propertysq = get_post_meta(get_the_ID(), "propertysq", true);を使います

それがあなたのために働くならば私を聞かせて。

2
hkchakladar

非常に多くの人がそれを操作したいので、ヘッダに<title>タグを含めることはもはや流行ではありません。代わりに、あなたはそこにwp_headを置き、あなたのテーマでそれをサポートすることによってタイトルの操作を可能にします:

add_action('after_setup_theme','wpse239252_theme_init');
  function wpse239252_theme_init () {   
    add_theme_support('title-tag');
    }

さて、 wp_title フィルターを使用して、あらゆる種類の(SEO)プラグインがそれで動作したいと思うかもしれません。このフィルタを使って何かをして後でプラグインを起動すると、行ったことがすべて失われる可能性があります。今、私はあなたがどのプラグインをインストールしたのかわかりませんが、あなたはあなたのフィルタがこれに高い優先順位を与えることによって最後であることを確認することができます。

add_filter( 'wp_title', 'wpse239252_title_filter', 9999, 2 );
  function wpse239252_title_filter ($title,$separator) {
    ... do stuff with $title ...
    return $title;
    }
1
cjbj