我是WordPress的新手, 想创建一个菜单。使用wp_list_pages(), 我可以生成包装在<
li>
标记中的链接列表。
很好, 但是我想在这些类中添加自己的类(也许还要更改包装它们的元素)。
我浏览了https://developer.wordpress.org/reference/functions/wp_list_pages/和一些论坛帖子, 但未能找到正确方向的任何内容。
如何自定义wp_list_pages的输出?
#1你可以通过重写.page-item类来实现此目的。在此处查看更多详细信息https://developer.wordpress.org/reference/functions/wp_list_pages/#more-information
如果你需要添加自定义类或更改列表的呈现方式, 则可以附加walker函数https://developer.wordpress.org/reference/classes/walker/
可以在https://developer.wordpress.org/reference/classes/walker_nav_menu/找到示例。
class Custom_Walker_Page extends Walker_page {function start_el( &
$output, $item, $depth = 0, $args = array(), $id = 0 )
{
//You can make your change here
}}
$args = array(
.....
.....
'walker' =>
new Custom_Walker_page()
#2我发现了两种方法,
使用过滤器和正则表达式
将以下内容添加到你的主题functions.php文件中。
function clean_wp_list_pages($menu) {
// Remove redundant title attributes
$menu = remove_title_attributes($menu);
// Remove protocol and domain name from href values
$menu = make_href_root_relative($menu);
// Give the list items containing the current item or one of its ancestors a class name
$menu = preg_replace('/class="(.*?)current_page(.*?)"/', 'class="sel"', $menu);
// Remove all other class names
$menu = preg_replace('/ class=(["\'])(?!sel).*?\1/', '', $menu);
// Give the current link and the links to its ancestors a class name and wrap their content in a strong element
$menu = preg_replace('/class="sel">
<
a(.*?)>
(.*?)<
\/a>
/', 'class="sel">
<
a$1 class="sel">
<
strong>
$2<
/strong>
<
/a>
', $menu);
return $menu;
}
add_filter( 'wp_list_pages', 'clean_wp_list_pages' );
使用自定义沃克功能
与上面相同。将此添加到你的functions.php文件中:
class Clean_Walker extends Walker_Page {
function start_lvl(&
$output, $depth) {
$indent = str_repeat("\t", $depth);
$output .= "\n$indent<
ul>
\n";
}function start_el(&
$output, $page, $depth, $args, $current_page) {
if ( $depth )
$indent = str_repeat("\t", $depth);
else
$indent = '';
extract($args, EXTR_SKIP);
$class_attr = '';
if ( !empty($current_page) ) {
$_current_page = get_page( $current_page );
if ( (isset($_current_page->
ancestors) &
&
in_array($page->
ID, (array) $_current_page->
ancestors)) || ( $page->
ID == $current_page ) || ( $_current_page &
&
$page->
ID == $_current_page->
post_parent ) ) {
$class_attr = 'sel';
}
} elseif ( (is_single() || is_archive()) &
&
($page->
ID == get_option('page_for_posts')) ) {
$class_attr = 'sel';
}
if ( $class_attr != '' ) {
$class_attr = ' class="' . $class_attr . '"';
$link_before .= '<
strong>
';
$link_after = '<
/strong>
' . $link_after;
}
$output .= $indent . '<
li' . $class_attr . '>
<
a href="' . make_href_root_relative(get_page_link($page->
ID)) . '"' . $class_attr . '>
' . $link_before . apply_filters( 'the_title', $page->
post_title, $page->
ID ) . $link_after . '<
/a>
';
if ( !empty($show_date) ) {
if ( 'modified' == $show_date )
$time = $page->
post_modified;
else
$time = $page->
post_date;
$output .= " " . mysql2date($date_format, $time);
}
}
}
要使用此功能, 你需要使用walker参数调用wp_list_pages。
<
?php
$walker = new Clean_Walker();
wp_list_pages( array(
'title_li' =>
'', 'walker' =>
$walker, ) );
?>
【如何自定义wp_list_pages()的输出,以便可以将链接包装在自己的HTML中()】资料来源:这里
推荐阅读
- 如何在WordPress中向移动用户显示不同的网站徽标()
- 如何在WordPress页面中创建不同的可编辑section()
- 如何为所有”h2标签”添加数字
- 如何恢复wordpress备份()
- 如何在WordPress自定义meta框中保存复选框状态()
- 英国脱欧后,亚马逊电商产品要从新认证
- Tomcat 离线安装
- Docker 安装 Gitlab
- 博睿数据赋能数字化转型,用户体验升级需要有“温度”的技术