Pregunta

Ok, esto es un poco complejo. Estoy creando un complemento y deseo encontrar el ID de categoría en la página Publicar.

Esa es la parte fácil.

Lo que lo hace complejo es que lo estoy haciendo dentro de un ob_start (iniciado en una acción 'template_redirect') ya que quiero editar la página completa antes de que vuelva al navegador. Nuevamente, eso es bastante fácil desde la función ob_start.

Con la ID devuelta, quiero evaluar algunos php almacenados en un campo sql. Estoy tratando de hacer esto desde la función ob_start

$tui_cifp_insertvalue = tui_cifp_evaluate_html($tui_cifp_insertvalue);

Esto llama esto

function tui_cifp_evaluate_html($string) {
return preg_replace_callback("/(<\?php|<\?|< \?php)(.*?)\?>/si",'EvalBuffer', $string);
}

Que a su vez llama

function EvalBuffer($string) {
ob_start();
eval("$string[2];");
$ret = ob_get_contents();
ob_end_clean();
return $ret;
}

Y el php que estoy tratando de evaluar es.

<?php tui_findPostThumbIMG([categoryID],100,100,'categoryintro-thumbnail','','',''); ?>

Todo esto funciona fuera de la rutina ob_start, pero aquí incluso php simple no funciona. Desde la rutina ob_start, el complemento se rompe y vuelve una página en blanco.

Entonces pensé que podría evaluar el php antes del inicio de ob_start y pasar el resultado a través de una variable global. Eso funciona, pero en el momento en que esto comienza a usar lo siguiente, el ID de categoría no está disponible.

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 función ob_start

function tui_cifp_ob_start()
{

ob_start('tui_cifp_templatefilter');

}

Ok, estoy perplejo ... ¿alguna idea?

Necesito encontrar un enlace que se ejecute en el momento adecuado para tener acceso a la ID de categoría, o necesito averiguar cómo evaluar el php durante el ob_start.

Oh ... supongo que debería decir. Lo que quiero hacer es reemplazar una etiqueta en una página de WordPress con alguna otra información guardada en una cadena, pero necesito poder hacer esto una vez que la página completa si se dibuja.

Gracias Stephen

PD: He preguntado esto en los foros de WordPress sin respuesta. Perdón por la publicación cruzada pero estoy un poco desesperado.

¿Fue útil?

Solución 2

Gracias OIS, agradezco su propuesta de esa solución. Sin embargo, está haciendo lo mismo que he estado haciendo. Supongo que estructurado de manera diferente.

Sin embargo, me hizo ver el problema desde una perspectiva diferente.

De lo que me di cuenta fue que get_the_category() necesita un parámetro y no estaba obteniendo una categoría porque era la ID de la publicación la que no estaba disponible. Resolví el problema haciendo la configuración por adelantado de esta manera.

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

    }

}

Gracias de nuevo.

Otros consejos

No soy parcial para evaluar, pero parece que funciona, con o sin el buffer de salida al final ...

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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top