2009-01-15 77 views
1

好吧,这有点复杂。我正在创建一个插件,并希望从Post页面找到类别ID。Wordpress类别ID与Eval问题

这是很容易的部分。

是什么让它变得复杂是我在ob_start(在'template_redirect'动作中启动)中完成它,因为我想在返回到浏览器之前编辑整个页面。再次,ob_start函数很容易。

随着ID返回我想评估一些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例程中,插件断开并返回一个空白页面。

所以我想我可以在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。

哦......我想我应该说。我想要做的是用一个字符串中保存的其他信息替换wordpress页面上的标签,但是如果绘制完整页面,则需要能够做到这一点。

感谢 斯蒂芬

PS我问这个在WordPress的论坛无响应。对不起,我有点绝望。

回答

0

感谢OIS,我很欣赏你提议的解决方案。然而,它和我一直在做同样的事情。我猜结构不同。

但是,这确实使我从不同的角度来看问题。

我意识到get_the_category()需要一个参数,并没有得到一个类别,因为它是不可用的邮政编号。我通过像这样进行设置来解决问题。

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

    } 

} 

再次感谢。

0

我不是偏袒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();