J'ai un menu généré wp_nav_menu
qui ressemble à
<ul class="nav-menu" id="menu-top-nav">
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-43" id="menu-item-43"><a href="http://www.example.com/item1.com">Item 1</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-44" id="menu-item-44"><a href="http://www.example.com/item2.com">Item 2</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-45" id="menu-item-45"><a href="http://www.example.com/item3.com">Item 3</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-46" id="menu-item-46"><a href="http://www.example.com/item4.com">Item 4</a></li>
</ul>
Je veux modifier le menu ci-dessus en ajoutant un sous-menu à "Item 3" en utilisant mon plugin, donc ci-dessous est ma sortie souhaitée.
<ul class="nav-menu" id="menu-top-nav"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-43" id="menu-item-43"><a href="http://www.example.com/item1.com">Item 1</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-44" id="menu-item-44"><a href="http://www.example.com/item2.com">Item 2</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-45" id="menu-item-45"><a href="http://www.example.com/item3.com">Item 3</a>
<ul class="sub-menu">
<li class="menu-item" id="menu-item-48"><a href="http://www.example.com/child1.com">child 1</a></li>
<li class="menu-item" id="menu-item-49"><a href="http://www.example.com/child2.com">child 2</a></li>
<li class="menu-item" id="menu-item-50"><a href="http://www.example.com/child3.com">child 3</a></li>
</ul>
</li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-46" id="menu-item-46"><a href="http://www.example.com/item4.com">Item 4</a></li>
</ul>
J'ai essayé de suivre les filtres, mais ceux-ci ne m'ont pas aidé à atteindre la sortie ci-dessus.
wp_setup_nav_menu_item
wp_get_nav_menu_items
wp_nav_menu_items
Solution 1:
add_filter('wp_nav_menu_items', 'my_custom_menu_item', 10, 2);
function my_custom_menu_item($items, $args)
{
$parent_item_number = 3;
$pos = nth_strpos($items, '</a>', $parent_item_number) + 4;
$cat_id = 9;
$args = array('numberposts' => 5, 'category' => $cat_id);
$myposts = get_posts($args);
if (!empty($myposts))
{
$str_to_insert = '<ul class="sub-menu">';
global $post;
foreach ($myposts as $post) :
setup_postdata($post);
$str_to_insert .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
endforeach;
$str_to_insert .= '</ul>';
$items = substr($items, 0, $pos) . $str_to_insert . substr($items, $pos);
}
return $items;
}
function nth_strpos($str, $substr, $n, $stri = false)
{
if ($stri)
{
$str = strtolower($str);
$substr = strtolower($substr);
}
$ct = 0;
$pos = 0;
while (($pos = strpos($str, $substr, $pos)) !== false)
{
if (++$ct == $n)
{
return $pos;
}
$pos++;
}
return false;
}
La solution ci-dessus fonctionne mais je pense que ce n'est pas une bonne façon d'atteindre le résultat souhaité. J'aimerais avoir une bonne solution de votre part.
Réponses:
Vous pouvez modifier votre menu à l'aide du déambulateur.
créer un fichier subMenu.php dans le dossier du thème ajouter le code ci-dessous.
la source
Le crochet a
wp_nav_menu_items
raison si vous ajoutez des éléments à la structure du menu WP Nav. Voir l'exemple ci-dessous pour ajouter un lien statique "Accueil". Le lien est statique, à partir de la fonctionhome_url()
et je l'ai souligné uniquement dans les arguments de WP Nav Menu fpr les valeurs avant et après. L'élément li est statique, n'est chnagé que dans WordPress, si vous utilisez un Walker pour cet élément. Le crochetwp_nav_menu_items
est dans la listeul
. Après avoir défini la var pour ce nouveau contenu d'élément, je l'ajoute à la liste par défaut dans la var$items
, définie avant la sortie de la liste. Maintenant seulement un retour de tout le contenu.la source