Question

Ok, c'est un peu complexe. Je crée un plugin et souhaite trouver l'ID de la catégorie à partir de la page Poster.

C'est la partie facile.

Ce qui le rend complexe, c’est que je le fais dans ob_start (commencé dans une action 'template_redirect') car je veux éditer toute la page avant qu’elle ne soit renvoyée au navigateur. Encore une fois, c’est assez facile avec la fonction ob_start.

Avec l'identifiant renvoyé, je souhaite évaluer certains php stockés dans un champ SQL. J'essaie de faire cela depuis la fonction ob_start

$tui_cifp_insertvalue = tui_cifp_evaluate_html($tui_cifp_insertvalue);

Ceci appelle cela

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

Qui appelle à son tour

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

Et le php que j'essaie d'évaluer est.

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

Tout cela fonctionne en dehors de la routine ob_start, mais ici même le php simple ne fonctionne pas. À partir de la routine ob_start, le plug-in est interrompu et une page vierge est renvoyée.

J'ai donc pensé pouvoir évaluer le php avant le début de l'ob_start et transmettre le résultat via une variable globale. Cela fonctionne, mais au moment où cela commence à utiliser ce qui suit, l’ID de catégorie n’est pas 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 fonction ob_start

function tui_cifp_ob_start()
{

ob_start('tui_cifp_templatefilter');

}

Ok je suis perplexe ... des idées?

Je dois soit trouver un hook qui s'exécute au bon moment pour avoir accès à l'ID de catégorie, soit trouver comment évaluer le php lors de l'ob_start.

Oh ... je suppose que je devrais dire. Ce que je veux faire, c'est remplacer une balise sur une page wordpress par une autre information enregistrée dans une chaîne, mais je dois pouvoir le faire une fois la page complète, si elle est dessinée.

Merci Stephen

Post-scriptum J'ai posé cette question sur les forums wordpress sans réponse. Désolé pour le cross post mais je suis un peu désespéré.

Était-ce utile?

La solution 2

Merci OIS, j'apprécie que vous proposiez cette solution. Cependant, il fait la même chose que moi. Je suppose que structuré différemment.

Cela m'a toutefois amené à examiner le problème sous un angle différent.

Ce que j’ai compris, c’est que get_the_category() a besoin d’un paramètre et n’obtient pas de catégorie, car c’est l’ID de publication qui n’est pas disponible. J'ai résolu le problème en effectuant la configuration initiale comme suit.

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

    }

}

Merci encore.

Autres conseils

Je ne suis pas partiel à eval, mais cela semble fonctionner, avec ou sans la mise en tampon de sortie à la fin ...

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top