サポート » テーマ » 宣言した変数を別のテンプレートで読み込む件について

  • 基本的な質問で申し訳ありません。変数の宣言について質問があります。

    if( is_page() ){
    	$kind_name = get_the_title( $post->post_parent);
    }

    というような感じで、ページのタイトルなどを変数に入れて、
    他のテンプレートで変数を使いたいと思っています。
    最初はfunction.phpで変数の宣言をすれば良いと思い、記述してみたのですが、
    header.phpで変数を参照した所、読み込まれていなかったので、
    function.phpを読み込む段階ではまだget_the_titleできないのかな、と思い、
    header.phpで宣言した所、(当然かもしれませんが)header.php内で変数を参照すると
    きちんと値が入っていました。
    最終目的としては、footer.phpでこの変数を参照できるようにしたいのですが、
    header.phpで宣言した変数を参照する事ができませんでした。
    (ちなみにfooter.phpの冒頭に、「global $kind_name;」と記述しています)

    header.phpで宣言した変数をfooter.phpで読み込むにはどうしたら良いでしょうか?

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • こんにちは
    functions.phpに

    function kind_name(){
    	global $post;
    	if( is_page() ){
    		return get_the_title( $post->post_parent);
    	}
    	return;
    }

    header.php footer.php

    <?php
    echo kind_name();
    ?>

    とすれば いいと思います

    トピック投稿者 heureux

    (@heureux)

    nobitaさま
    コメントありがとうございます!
    教えていただいたソースを書くと、
    header.php
    footer.php
    では読み込めました!どうもありがとうございます!
    page.php/single.php/archive.phpなどには変数の中身が渡されないようなのですが、
    何か方法がありますでしょうか?

    if( is_page() ){

    で、「ページの場合は」という条件が入っていますので、single.phpやarchive.phpでは、何も返しません。

    get_header()を使って、テンプレートをインクルードした場合は、header.phpで定義した変数は、index.phpに読み込まれません。

    PHPのincludeなどとは、挙動が異なります。

    functions.php に直接コンディショナルタグを書いても、大抵動作しません。

    functions.phpに

    global $post;
    var_dump( $post );
    global $wp_query;
    var_dump( $wp_query );

    としても $postは、nullが返ると思います

    $wp_queryオブジェクトも、nullまたは、falseしか返しません

    ので、$post->post_parent オブジェクトは使えません。

    ので、内部的に$wp_queryを使うis_page()などのコンディショナルタグも、動作しません。

    このため、関数化して、実際の関数の実行は、テンプレート上で行う方法をお知らせしました

    is_pageは親ページのタイトルを取得するという意味だと解釈しましたが、それ以外の場合は、それぞれのケースにしたがって書く必要があるとおもいます

    また、余談ですが、単にユーザー関数を定義するだけではなく、アクションフックや、フィルタを調べていただいて、WordPress特有の使い方も活用するといいと思います。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「宣言した変数を別のテンプレートで読み込む件について」には新たに返信することはできません。