ID categoria Wordpress vs Eval Issue
Domanda
Ok, questo è un po 'complesso. Sto creando un plug-in e desidero trovare l'ID categoria dalla pagina Posta.
Questa è la parte facile.
Ciò che lo rende complesso è che lo sto facendo all'interno di un ob_start (avviato in un'azione 'template_redirect') poiché voglio modificare l'intera pagina prima che venga restituita al browser. Ancora una volta è abbastanza facile dalla funzione ob_start.
Con l'ID restituito voglio valutare alcuni php memorizzati in un campo sql. Sto provando a farlo dall'interno della funzione ob_start
$tui_cifp_insertvalue = tui_cifp_evaluate_html($tui_cifp_insertvalue);
Questo lo chiama
function tui_cifp_evaluate_html($string) {
return preg_replace_callback("/(<\?php|<\?|< \?php)(.*?)\?>/si",'EvalBuffer', $string);
}
Che a sua volta chiama
function EvalBuffer($string) {
ob_start();
eval("$string[2];");
$ret = ob_get_contents();
ob_end_clean();
return $ret;
}
E il php che sto cercando di valutare è.
<?php tui_findPostThumbIMG([categoryID],100,100,'categoryintro-thumbnail','','',''); ?>
Tutto questo funziona al di fuori della routine ob_start, ma qui anche php semplice non funziona. Dall'interno della routine ob_start il plugin si interrompe e ritorna una pagina vuota.
Quindi ho pensato di poter valutare il php prima dell'inizio di ob_start e passare il risultato attraverso una variabile globale. Funziona, ma nel momento in cui inizia a utilizzare quanto segue, l'ID categoria non è disponibile.
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'); //
}
La funzione ob_start
function tui_cifp_ob_start()
{
ob_start('tui_cifp_templatefilter');
}
Ok, sono perplesso ... qualche idea?
O ho bisogno di trovare un hook che si esegua al momento giusto in modo da avere accesso all'ID categoria, o ho bisogno di capire come valutare il php durante ob_start.
Oh ... immagino che dovrei dirlo. Quello che voglio fare è sostituire un tag su una pagina di wordpress con alcune altre informazioni salvate in una stringa, ma devo essere in grado di farlo una volta che l'intera pagina è disegnata.
Grazie Stephen
PS L'ho chiesto sui forum di wordpress senza una risposta. Ci scusiamo per il cross posting ma sono un po 'disperato.
Soluzione 2
Grazie OIS, apprezzo che tu abbia proposto quella soluzione. Tuttavia sta facendo la stessa cosa che ho fatto io. Immagino che sia strutturato diversamente.
Tuttavia mi ha fatto guardare il problema da una prospettiva diversa.
Quello che mi sono reso conto è che get_the_category()
ha bisogno di un parametro e non ha ottenuto una categoria perché era l'ID del post che non era disponibile. Ho risolto il problema eseguendo l'installazione in questo modo.
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');
}
}
Grazie ancora.
Altri suggerimenti
Non sono parziale da valutare, ma questo sembra funzionare, con o senza il buffering dell'output alla fine ...
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();