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.

È stato utile?

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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top