Хорошо, это немного сложно. Я создаю плагин и хочу найти идентификатор категории на странице поста.
Это легкая часть.
Что делает его сложным, так это то, что я делаю это в ob_start (запущенном в действии 'template_redirect'), так как я хочу отредактировать всю страницу до ее возвращения в браузер. Опять же, это достаточно просто из функции ob_start.
С возвращенным идентификатором я хочу оценить некоторые php, хранящиеся в поле sql. Я пытаюсь сделать это из функции 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 плагин разрывается и возвращается пустая страница.
Поэтому я подумал, что смогу оценить php до начала ob_start и передать результат через глобальную переменную. Это работает, но в тот момент, когда начинается использование следующего, идентификатор категории недоступен.
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');
}
Хорошо, я в тупике ... есть идеи?
Мне либо нужно найти ловушку, которая выполняется в нужное время, чтобы у меня был доступ к идентификатору категории, либо мне нужно выяснить, как оценивать php во время ob_start.
О ... Я думаю, я должен сказать. То, что я хочу сделать, это заменить тег на странице WordPress другой информацией, сохраненной в строке, но нужно иметь возможность сделать это один раз на полную страницу, если она нарисована.
Спасибо
Стивен
PS Я спрашивал об этом на форумах WordPress без ответа. Извините за перекрестную публикацию, но я немного отчаялся.