У меня здесь два разных дисплея. 1 для мобильных устройств, а другой для рабочего стола. Мне нужно вывести другой html для обоих только для 1 пункта меню (последний 1) в меню. Например, учитывая следующую структуру меню:WP_Nav_Walker расширяется, нужно знать количество элементов подменю
- Menu Item 1
-- Child 1
-- Child 2
-- Child 3
- Menu Item 2
-- Child 1
-- Child 2
-- Child 3
-- Child 4
- Menu Item 3
-- Child 1
-- Child 2
-- Child 3
-- Child 4
-- Child 5
-- Child 6
Мне нужно, чтобы иметь возможность вывести следующую структуру для рабочего стола:
<ul>
<li>Menu Item 1
<ul>
<li>Child 1</li>
<li>Child 2</li>
<li>Child 3</li>
</ul>
</li>
<li>Menu Item 2
<ul>
<li>Child 1</li>
<li>Child 2</li>
<li>Child 3</li>
<li>Child 4</li>
</ul>
</li>
<li>Menu Item 3
<ul>
<li>Child 1</li>
<li>Child 2</li>
<li>Child 3</li>
</ul>
</li>
<li>
<ul>
<li>Child 4</li>
<li>Child 5</li>
<li>Child 6</li>
</ul>
</li>
</ul>
Последний пункт родительское меню с $depth === 0
необходимо разбить пополам в отдельные предметы. Но на мобильном дисплее его не нужно разделить пополам, он должен идеально отображаться для мобильных устройств.
Итак, у меня есть 2 разных класса WP_Nav_Walker
. 1 для мобильных устройств, а другой для настольных ПК, которые обрабатывают меню по-разному, однако проблема, с которой я столкнулась, заключается в том, как получить общее количество элементов подменю. Я понимаю, как узнать, есть ли в меню дети или нет $args->has_children
, но как получить общее количество детей?
Я создал переменную знать, какие подменю пункт я на в end_el
функции:
class Custom_Nav_Walker extends Walker_Nav_Menu {
function __construct() {
$this->boxitem_index = 0;
}
public function start_lvl(&$output, $depth = 0, $args = array())
{
if ($depth === 0 && $this->menu_type == 'header')
{
echo '<pre>', var_dump($item), '</pre>';
}
}
}
Я также установить пользовательское свойство menu_type
, который получает набор в функции start_el
что присоединяется к последнему меню здесь, поэтому я могу знать, что это меню, которое я хочу.
В принципе, мне нужно разделить его пополам, а не на 3, но я не знаю, что такое половина. И, конечно, я не хочу выполнять оператор if в последнем элементе. Таким образом, это поможет узнать, сколько у нас элементов, которые составляют $ depth === 1 для последнего родительского меню. Это возможно?
Выход я для $item
это:
object(WP_Post)#723 (40) {
["ID"]=>
int(73)
["post_author"]=>
string(1) "1"
["post_date"]=>
string(19) "2016-07-14 18:09:44"
["post_date_gmt"]=>
string(19) "2016-07-14 18:09:44"
["post_content"]=>
string(0) ""
["post_title"]=>
string(11) "Quick Links"
["post_excerpt"]=>
string(0) ""
["post_status"]=>
string(7) "publish"
["comment_status"]=>
string(6) "closed"
["ping_status"]=>
string(6) "closed"
["post_password"]=>
string(0) ""
["post_name"]=>
string(13) "quick-links-3"
["to_ping"]=>
string(0) ""
["pinged"]=>
string(0) ""
["post_modified"]=>
string(19) "2016-07-21 17:12:08"
["post_modified_gmt"]=>
string(19) "2016-07-21 17:12:08"
["post_content_filtered"]=>
string(0) ""
["post_parent"]=>
int(0)
["guid"]=>
string(30) "http://0b90b21a.ngrok.io/?p=73"
["menu_order"]=>
int(12)
["post_type"]=>
string(13) "nav_menu_item"
["post_mime_type"]=>
string(0) ""
["comment_count"]=>
string(1) "0"
["filter"]=>
string(3) "raw"
["db_id"]=>
int(73)
["menu_item_parent"]=>
string(1) "0"
["object_id"]=>
string(2) "73"
["object"]=>
string(6) "custom"
["type"]=>
string(6) "custom"
["type_label"]=>
string(11) "Custom Link"
["title"]=>
string(11) "Quick Links"
["url"]=>
string(0) ""
["target"]=>
string(0) ""
["attr_title"]=>
string(0) ""
["description"]=>
string(0) ""
["classes"]=>
array(5) {
[0]=>
string(0) ""
[1]=>
string(9) "menu-item"
[2]=>
string(21) "menu-item-type-custom"
[3]=>
string(23) "menu-item-object-custom"
[4]=>
string(22) "menu-item-has-children"
}
["xfn"]=>
string(0) ""
["current"]=>
bool(false)
["current_item_ancestor"]=>
bool(false)
["current_item_parent"]=>
bool(false)
}
_ «Последний элемент родительского меню с глубиной $ == должен быть разделен пополам на отдельные элементы» _ - почему? Пожалуйста, объясните, что вы на самом деле пытаетесь выполнить. Могут быть и другие варианты, которые не создают субоптимальную структуру HTML и используют CSS для достижения желаемого эффекта. – CBroe
Я разделяю столбцы для дисплеев рабочего стола. Это единственный способ поддержать IE8, поскольку сайт уже делает. Я объединяю сайт из ASP.NET (используя Umbraco CMS) в PHP (используя Wordpress) и должен поддерживать эту структуру HTML по причинам совместимости. –
Вы посмотрели, что содержит структура данных $ item в этой точке? – CBroe