1

わかりました、これは少し複雑です。プラグインを作成していますが、投稿ページからカテゴリ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私はワードプレスフォーラムでこれを返答なしで尋ねました。クロスポストで申し訳ありませんが、私は少し必死です。

4

2 に答える 2

0

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');

    }

}

再度、感謝します。

于 2009-01-16T08:31:53.827 に答える
0

私は評価に部分的ではありませんが、これは、最後に出力バッファリングの有無にかかわらず、うまくいくようです...

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();
于 2009-01-16T02:51:10.440 に答える