WordpressのカテゴリIDと評価の問題
質問
これは少し複雑です。プラグインを作成していますが、投稿ページからカテゴリIDを見つけたいです。
これは簡単な部分です。
それを複雑にしているのは、ブラウザに返される前にページ全体を編集したいため、ob_start( 'template_redirect'アクションで開始)内でそれを実行していることです。繰り返しますが、これはob_start関数から十分簡単です。
返されたIDを使用して、sqlフィールドに保存されたphpを評価します。 ob_start関数内からこれを実行しようとしています
$tui_cifp_insertvalue = tui_cifp_evaluate_html($tui_cifp_insertvalue);
これはこれを呼び出します
function tui_cifp_evaluate_html($string) {
return preg_replace_callback("/(<\?php|<\?|< \?php)(.*?)\?>/si",'EvalBuffer', $string);
}
順番に呼び出す
function EvalBuffer($string) {
ob_start();
eval("$string[2];");
$ret = ob_get_contents();
ob_end_clean();
return $ret;
}
そして、私が評価しようとしているphpは次のとおりです。
<?php tui_findPostThumbIMG([categoryID],100,100,'categoryintro-thumbnail','','',''); ?>
これはすべてob_startルーチンの外で動作しますが、ここでは単純なphpでも動作しません。 ob_startルーチン内からプラグインが中断し、空白ページが返されます。
したがって、ob_startの開始前にphpを評価し、結果をグローバル変数に渡すことができると考えました。それは機能しますが、これが次を使用して開始する時点では、カテゴリIDは使用できません。
if ( strpos($_SERVER['REQUEST_URI'], 'wp-admin') === false ) {
global $holdvalue;
$tui_cifp_insertvalue = get_option('tui_cifp_insertvalue');
$categories = get_the_category();
$categoryID = $categories[0]->cat_ID;
$tui_cifp_insertvalue = str_replace("[categoryID]", $categoryID, $tui_cifp_insertvalue);
$holdvalue = tui_cifp_evaluate_html($tui_cifp_insertvalue);
add_action('template_redirect','tui_cifp_ob_start'); //
}
ob_start関数
function tui_cifp_ob_start()
{
ob_start('tui_cifp_templatefilter');
}
わかりません。何か困っていますか?
カテゴリIDにアクセスできるように適切なタイミングで実行されるフックを見つける必要があるか、ob_start中にphpを評価する方法を考え出す必要があります。
ああ...私は言うべきだと思う。私がやりたいのは、ワードプレスのページのタグを文字列に保存されている他の情報に置き換えることですが、描画された場合はページ全体で一度できるようにする必要があります。
ありがとう スティーブン
PS私はこれをワードプレスのフォーラムで回答なしで尋ねました。クロス投稿で申し訳ありませんが、私は少し必死です。
解決 2
OISに感謝します。その解決策を提案していただきありがとうございます。しかし、私がやっていることと同じことをしています。構造が違うと思います。
しかし、別の見込み客から問題を見るようになりました。
私が気づいたのは、get_the_category()
にはパラメーターが必要であり、利用できないのは投稿IDであったため、カテゴリを取得していなかったことです。このように事前にセットアップすることで問題を解決しました。
function tui_cifp_ob_start()
{
global $tui_cifp_message, $tui_cifp_div, $wp_query;
if (is_single())
{
$tui_cifp_div = get_option('tui_cifp_div');
if ($tui_cifp_div !== '')
{
$thePostID = $wp_query->post->ID;
$categories = get_the_category($thePostID);
$categoryID = $categories[0]->cat_ID;
$tui_cifp_message = get_option('tui_cifp_message');
$categoryTitle = $categories[0]->cat_name;
$categoryDescription = $categories[0]->category_description;
$tui_cifp_message = str_replace("[categoryID]", $categoryID, $tui_cifp_message);
$tui_cifp_message = str_replace("[categoryTitle]", $categoryTitle, $tui_cifp_message);
$tui_cifp_message = str_replace("[categoryDescription]", $categoryDescription, $tui_cifp_message);
$tui_cifp_message = $tui_cifp_div.$tui_cifp_message;
$tui_cifp_message = tui_cifp_evaluate_html($tui_cifp_message);
}
ob_start('tui_cifp_templatefilter');
}
}
ありがとうございます。
他のヒント
evalには部分的ではありませんが、最後に出力バッファリングがある場合でもない場合でも、これは機能するようです...
function tui_findPostThumbIMG()
{
echo "hey hey\n";
}
ob_start();
$categoryID = 10;
$tui_cifp_insertvalue = "<?php tui_findPostThumbIMG([categoryID],100,100,'categoryintro-thumbnail','','',''); ?>";
$tui_cifp_insertvalue = str_replace("[categoryID]", $categoryID, $tui_cifp_insertvalue);
$tui_cifp_insertvalue = tui_cifp_evaluate_html($tui_cifp_insertvalue);
echo $tui_cifp_insertvalue;
ob_end_flush();