web-dev-qa-db-fra.com

supprimer les balises <li> de wp_list_pages () en utilisant PHP

comme le titre l'indique, j'essaie de supprimer les balises <li></li> de la liste générée avec wp_list_pages().

Mon idée est de faire en quelque sorte une boucle for/foreach à travers les éléments de menu et de supprimer les balises <li></li> à l'aide de str_replace(), mais je devrais d'abord analyser la liste renvoyée dans un tableau ou quelque chose à parcourir à travers les éléments de la liste ...

Des idées sur la façon dont je peux accomplir cela? ou peut-être une meilleure façon de s'y prendre?

Merci d'avance!

1
Odyss3us

Vous pouvez essayer de les supprimer, mais peut-être est-il plus facile de ne pas les générer. La liste de pages est affichée par un Walker . Il s'agit d'une classe qui "parcourt" tous les éléments de l'arborescence et les affiche. wp_list_pages() par défaut (via walk_page_tree() ) utilise la classe Walker_Page , qui affiche tout dans les éléments <li>. Cependant, vous pouvez dupliquer cette classe, supprimer tout ce dont vous n'avez pas besoin et transmettre cette classe à wp_list_pages() (avec l'argument walker).

6
Jan Fabry

J'ai utilisé la fonction strip_tags:

$args = array('child_of' => $parent, 'echo' => false, 'title_li' => false, 'depth' => 0);

$output .= strip_tags(wp_list_pages($args), "<a>");
1
user990717

si vous ne voulez pas créer votre propre marcheur, utilisez simplement str_replace(array('<li>', '</li>', '<ul>', '</ul>'), '', wp_list_pages('echo=0'));

1
onetrickpony

Merci pour les réponses les gars, j'ai modifié ma réponse pour refléter le commentaire de Jan Fabry à propos de l'argument echo=0, également merci à One Trick Pony pour l'avoir souligné au départ.

$lookfor = array('<li','</li>');
$replacewith = array('<div', '</div>');

$args = array(
    'echo'          => 0,
    'sort_column'   => 'menu_order',
    'title_li'      => __('')
);

$output = wp_list_pages( $args ); 

echo str_replace($lookfor,$replacewith,$output);

Je vais certainement envisager de créer un marcheur personnalisé, car cela semble être le meilleur moyen d’atteindre le résultat?

Merci encore pour toute votre aide!

1
Odyss3us