サードパーティのプラグインによって提供されるフィルターにカスタムデータを渡す必要があることに気づきました。これを行うために私が見た方法はすべて非常に複雑で、頭を回すのが困難です。
この例を見てみましょう:
$score = 42; //Some crazy calculation I don't want to repeat.
function add_score_to_title($title) {
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
$score
変数をどのように渡すことができadd_score_to_title()
ますか?
私がやったことは、グローバル$wp
オブジェクトに変数を追加することでした。だからあなたはこれで終わります:
global $wp;
$score = 42; //Some crazy calculation I don't want to repeat.
$wp->some_random_name_for_score = $score;
function add_score_to_title($title) {
global $wp;
$score = $wp->some_random_name_for_score;
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
汚れた?多分。簡単?うん!この手法の欠点はありますか?議論してください。
更新 ここに問題の完全なコードがあります-> http://pastebin.com/fkSXY04m
その関数内で「クレイジーな計算」を行うだけです...
—
onetrickpony
私の簡単な例から理解するのはおそらく難しいでしょう。$ score変数は、そのテンプレート全体で使用されます。一度計算して、ページタイトルを変更するためのフィルターのコールバックである関数にその値を渡します。このフィルターはAll In One SEO Packで使用されます。計算を複数回実行することは望ましくありません。
—
kingkool68
次に、グローバル状態の導入を必要としないソリューションが必要な場合は、さらにコードを投稿する必要があります(これは決して必要ではありません)。
—
onetrickpony
テンプレートファイルの完全なコードは次のとおりです。
—
kingkool68
$score
物事の配列をループして変数をインクリメントすることで計算されます。 pastebin.com/fkSXY04m