2009-01-15 66 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();