web-dev-qa-db-ja.com

を使用してwp_list_pages()から<li>タグを削除する PHP

タイトルが述べているように、私はwp_list_pages()で生成されるリストから<li></li>タグを削除しようとしています。

私の考えはどういうわけかメニュー項目を通してfor/foreachループを実行し、str_replace()を使用して<li></li>タグを削除することですが、最初にリスト項目をたどるために返されたリストを配列か何かにパースする必要があります...

どのようにしてそれを達成することができるかについての任意のアイデア?それとももっと良い方法でしょうか。

事前に感謝します!

1
Odyss3us

あなたはそれらを削除しようとすることができましたが、多分それはそもそもそれらを生成しないほうが簡単です。ページリストは、Walkerによって表示されます。これは、ツリー内のすべての項目を「歩き回って」表示するクラスです。 wp_list_pages() はデフォルトで(via walk_page_tree() を使って) Walker_Pageクラス 、これはすべてを<li>要素で表示します。しかし、このクラスを複製し、不要なものをすべて削除し、そのクラスを(walker引数を付けて)wp_list_pages()に渡すことができます。

6
Jan Fabry

Strip_tags関数を使いました:

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

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

あなた自身のウォーカーを作成したくない場合は、単にstr_replace(array('<li>', '</li>', '<ul>', '</ul>'), '', wp_list_pages('echo=0'));を使用してください。

1
onetrickpony

回答をありがとう、Jan Fabryのecho=0引数に関するコメントを反映するように回答を編集しました。最初にそれを指摘してくれたOne Trick Ponyにも感謝します。

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

それは結果を達成するためのより良い方法のように思われるので、私は間違いなくカスタムウォーカーを作成することを検討しますか?

ご協力ありがとうございました。

1
Odyss3us