經過數小時的研究,我發現這是不可能與自定義步行者類。 WordPress的,該<li>
本身不能被修改的class-walker-nav-menu.php意見,線189-203特別提到:
/**
* Filters a menu item's starting output.
*
* The menu item's starting output only includes `$args->before`, the opening `<a>`,
* the menu item's title, the closing `</a>`, and `$args->after`. Currently, there is
* no filter for modifying the opening and closing `<li>` for a menu item.
*
* @since 3.0.0
*
* @param string $item_output The menu item's starting HTML output.
* @param object $item Menu item data object.
* @param int $depth Depth of menu item. Used for padding.
* @param array $args An array of wp_nav_menu() arguments.
*/
$output .= apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args);
相反,我不得不使用Javascript(顯然不理想,但可行的)來做到這一點。這比第一次看起來要複雜得多。你必須設置一個正則表達式來讀取你的wp_nav_class
輸出,然後通過多維數組移動這些片段。通讀以下代碼:
// 1- Get entire content of sidebar menu ul, then split by row
var listItems = $(".sidebar-nav").html();
var listItemsArray = listItems.match(/(.*<\/li>)/gm);
// 1b- Set up variables
var listItemsTemp = [];
var listItemsRearranged = new Array(listItemsArray.length);
var listItemsRearrangedConcat = new Array(listItemsArray.length);
// 2- Take listItemsArray and loop through it w/ regex
for (var i = 0; i < listItemsArray.length; i++) {
// 4- Use regex to break each list item into five pieces
listItemsTemp[i] = listItemsArray[i].match(/((<\w+\b>)|(<a\shref=".*">)|(\w+\b)|(<\/\w+\b)>)/g);
// 5- Setup listItemsRearranged[i] with an array of listItemsTemp.length
listItemsRearranged[i] = new Array(listItemsTemp.length);
// 6- Take listItemsTemp and reassign positions
// We can do this because our string will always have five pieces
listItemsRearranged[i][0] = listItemsTemp[i][1];
listItemsRearranged[i][1] = listItemsTemp[i][0];
listItemsRearranged[i][2] = listItemsTemp[i][2];
listItemsRearranged[i][3] = listItemsTemp[i][4];
listItemsRearranged[i][4] = listItemsTemp[i][3];
// 7- Join the array back into a string
listItemsRearrangedConcat[i] = listItemsRearranged[i].join("");
}
// 8- Finally, we rejoin the string and print back into the page
var listItemsFinal = listItemsRearrangedConcat.join("");
$(".sidebar-nav").html(listItemsFinal);
有趣 - 你在哪裏設置'$ output'變量,在模板中,'functions.php',自定義插件? – staypuftman
$ output是一個可以有任何名稱的字符串,不要將它與Wp_Nav_Walker方法的$輸出混淆,儘管在walker完成後字符串是相同的。就我個人而言,我在functions.php中創建了一個包裝函數,其中我使用wp_nav_menu,使用'echo'=> false捕獲輸出,對其進行分割並重新組織專門爲我創建的菜單項目。 –