我正在使用自定义主题,并且我想在菜单链接中添加data-filter
属性。我没有构建主题,因此我正在努力弄清楚如何以及在何处添加此主题。
在我的functions.php中,我相信这个代码会加载我的菜单:
//Default WP menu
function litho_default_wp_menu_off(){}
function litho_default_wp_menu()
{
$args = array(
'sort_column' => 'menu_order, post_title',
'menu_class' => 'menu',
'include' => '',
'exclude' => '',
'echo' => false,
'show_home' => false,
'link_before' => '',
'link_after' => '' );
$menu = wp_page_menu( $args );
$menu = preg_replace('/^(<div class\="menu"><ul>)/i','',$menu);
$menu = preg_replace('/(<\/ul><\/div>)$/i','',$menu);
echo '<ul class="simple-nav">'.$menu.'</ul>';
}
class litho_responsive_menu extends Walker_Nav_Menu
{
function start_el(&$output, $items, $depth, $args)
{
global $wp_query;
$visual_indent = ( $depth ) ? str_repeat(' ', $depth) : '';
$output .= '<form name="menu_selector" method="post" action="#">';
$output .= '<select name="url_list" onchange="gotosite()">';
$output .= '<option value="" selected="selected" disabled="disabled">Please select...</option>';
foreach($items as $item)
if($depth != 0)
$output .= '<option value="' . esc_attr( $item->url ) .'">'. $visual_indent . apply_filters( 'the_title', $item->title, $item->ID ) . '</option>';
else
$output .= '<option value="' . esc_attr( $item->url ) .'">'.$prepend.apply_filters( 'the_title', $item->title, $item->ID ).'</option>';
$output .= '</select>';
$output .= '</form>';
// $output .= apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args );
}
function end_el(&$output, $item, $depth) {
return;
}
}
这会输出一个如下所示的菜单:
<div class="row" id="main_menu">
<div class="columns six">
<nav role="navigation">
<ul class="simple-nav">
<li class="page_item page-item-15 current_page_item"><a href="http://192.168.0.16:8888/">HOME</a></li>
<li class="page_item page-item-38"><a href="http://192.168.0.16:8888/directing/">DIRECTING</a></li>
<li class="page_item page-item-40"><a href="http://192.168.0.16:8888/compositing/">COMPOSITING</a></li>
</ul>
</nav>
</div>
</div>
但是,我使用Isotope作为我的主题,并希望使用过滤。所以想要添加一个具有链接名称值的数据过滤器属性
例如,DIRECTING的链接将具有data-filter=".directing"
<ul id="filters">
<li><a href="#" class="all" data-filter="*">show all</a></li>
<li><a href="#" class="directing" data-filter=".directing">directing</a></li>
<li><a href="#" class="compositing" data-filter=".compositing">compositing</a></li>
</ul>
但我无法确定<li>
项代码的位置。我在<ul>
文件中看到了functions.php
的创建位置。但在<ul>
代码之间只显示.$menu.
当我查看$ menu时,没有提及任何列表项或向我添加data-filter
属性的方法。
如何在菜单列表项中添加data-filter
属性。
由于
答案 0 :(得分:1)
我设法通过在$ args数组中添加一个walker来实现这个目的:
$args = array(
'sort_column' => 'menu_order, post_title',
'menu_class' => 'menu',
'include' => '',
'exclude' => '',
'echo' => false,
'show_home' => false,
'link_before' => '',
'link_after' => '',
'walker' => new Custom_Walker_Nav_Menu );
然后添加此自定义助行器。
class Custom_Walker_Nav_Menu extends Walker_Nav_Menu {
function start_el(&$output, $page, $depth = 0, $args = array(), $id = 0) {
if ( $depth )
$indent = str_repeat("\t", $depth);
else
$indent = '';
extract($args, EXTR_SKIP);
$linkName = apply_filters( 'the_title', $page->post_title, $page->ID );
$output .= $indent . '<li id="item_'.$page->ID.'"><a href="#" class="'.strtolower($linkName).'" data-filter=".'.strtolower($linkName).'">'.$linkName.'</a>';
}
function end_el(&$output, $page, $depth = 0, $args = array()) {
$output .= "</li>\n";
}
}
这看起来是否正确?