サポート » テーマ » functions.phpに追加した関数について

  • 解決済 showgo

    (@showgo)


    functions.phpに以下のような関数を追加しています。

    function sc_bloginfo($atts, $content = null){
    	extract(shortcode_atts(array('arg' => ''), $atts));
    	return get_bloginfo($arg);
    }
    add_shortcode('bloginfo', 'sc_bloginfo');
    
    function get_title($id){
    	if($post = get_post($id)){
    		return apply_filters('the_title', $post->post_title);
    	}
    }
    
    function get_content($id){
    	if($post = get_post($id)){
    		return apply_filters('the_content', $post->post_content);
    	}
    }

    ちなみに、sc_bloginfo()とget_title()はweb上から拾い、get_content()はget_title()に倣って自作しました。

    次にExec-PHPプラグインを入れて、記事中で以上の関数を使用する際、
    get_content()とsc_bloginfo()を併用しようとするとsc_bloginfo()が効かなくなってしまいます。
    それぞれ単独では正常に動きますが、同時に使用するとダメなようです。
    どのように影響しあっているのかわからないので、上記より何かわかる方がいらっしゃったら是非ご教授願います。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • すいません、補足です。
    Exec-PHPプラグインを入れた時点でsc_bloginfo()を利用する必要はなく、
    記事中で普通にbloginfo()関数を使用すれば出来ることは既にわかっていますが、
    この場合何がいけないのかを知りたいです。

    とりあえず
    get_title, get_content は WordPress で定義済なので名前を変えた方が良いのと
    Exec-PHPプラグインを入れて記事中に <?php get_content(); ?> と書くと記事を表示する時に懐かしの永久ループになる気がします。

    >>kzさま
    ご返答ありがとう御座います。
    get_title()については検索した結果デフォルトで関数はないように見受けられたので使用しました…。
    参考:http://blog.knym.net/items/522/

    また、get_content()については仰るとおりfunctions.phpに追加してないとExec-PHPで記事中に記述すると無限ループが起こり、
    functions.phpに追加すると一応そちらが効くようでした。
    しかし、関数名をecho_content()と変更してみても当初の問題は発生してしまいました。

    exec-php/includes/runtime.php に
    add_filter('the_content', array(&$this, 'filter_user_content'), 1);
    とあるので the_content フィルタの最優先で filter_user_content() が実行されます。

    filter_user_content の内部では eval_php($content) が呼ばれて記事中の PHP が評価(実行)されます。

    てことは、記事中に get_content() なり echo_content() があると

    1.index.php や single.php で the_content() タグを使用。
    2.the_content() 内で apply_filters('the_content', $content) が実行される。
    3.exec-php の filter_user_content() が呼ばれる。
    4.eval_php($content) が呼ばれる。
    5.get_content() だか echo_content() が呼ばれる。
    6.return apply_filters('the_content', $post->post_content) が実行される。
    7.3.へ。で何も出力されない状態で永久ループ。

    となります。

    the_content フィルタの内部で the_content フィルタを実行するとアウトなのです。

    get_title() は simplepie のメンバ関数なので衝突はしませんが、ありがちな名前は自分用のファンクションには付けないのが不幸にならないための第一歩です。

    >>kzさま
    ご返答ありがとう御座います。
    自分の理解できる範疇を超えてきてしまったので今回は結果オーライということで、
    一段落したらkzさまの投稿してくれた内容を紐解いてみようと思います。。。

    ファンクション名のつけ方の注意点、非常に参考になりました。
    どうもありがとう御座います。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「functions.phpに追加した関数について」には新たに返信することはできません。