web-dev-qa-db-ja.com

WordPressに、関数呼び出しの出力を返すグローバル関数がないのはなぜですか?

テンプレートタグとgetで始まる関数がいくつかあります。時にはそれがするのがテーマでちょうどいいでしょう:

$title = the_title();

後でHTMLを使用する。これは単なる例です。当然ながらget_the_title()のような関数があります。しかし、それはその機能に対してのみ機能します。

私はなぜこのような機能がないのか疑問に思います。

function get_output() {
    $args     = func_get_args();
    $callback = array_shift($args);
    ob_start();
    call_user_func_array($callback, $args);
    return ob_get_clean();
}

それは出力を持つ関数を返す関数に変換することができます:

$title = get_output('the_title');

なぜそれについて考えられたことがないのですか?すべてのテーマ作者やハッカーがそうしたことを利用することができますね。

3
hakre

直接質問に答えて、それがWordPress機能性に特に当てはまらないという理由で、WordPressはこれのための機能を含みません。すなわちこれはWordPressではなくPHP(潜在的な)問題です。

また、データを返す関数を提供していないプラグインなどの回避策を提供するのはWordPressの責任ではありません(これは一般的なWordPressスタイルに反します)。

2
Joe Hoyle

get_postsがあなたの要求に対するWP答えであると私は主張します。テンプレートタグはThe Loopで使用するために作成されていますが、WP 'hacker'が代わりにget_posts()を使用して、たとえば$ post-> post_titleを変数に代入するのは簡単です。 The Loopに頼るのをやめるのは最初はイライラするが、過ぎ去るのは十分簡単だ。

2
kevtrout

一部のテーマ開発者にとってはより簡単かもしれないので、あなたはそれが行われるようにそれをしなければなりません。しかし、あなたは関数を自分で書くことができます:

function get_output($function){
    return call_user_func('get_'.$function);
}

Get_the_title()を書くことはget_output( 'the_title')を書くことよりも短いです:)

1
2ndkauboy