我是Wordpress的初学者,所以如果你们中的任何人能以正确的方式推动我,我将不胜感激。无论如何,让我苦恼的是wp\\u list\\u类别(和类似的函数)如何产生许多不必要的类和我不需要的东西。
我试着基于walker\\u类别创建自己的walker类,我似乎已经开始工作了。作为一个类,我所需要的只是当它是当前类别时出现一个“当前”类,但当它不是时,我根本不希望出现任何类。
然而,出于某种原因,我得到了一个额外的分类名称类。我已经查看了我的walker class a无数次,但似乎看不到分类名称应该存储在$class中的位置。我也看过最初的Walker课程,但没能从中得到什么。
请帮忙?:)
class Meow_Walker extends Walker_Category {
var $tree_type = \'category\';
var $db_fields = array (\'parent\' => \'parent\', \'id\' => \'term_id\');
function start_lvl( &$output, $depth = 0, $args = array() ) {
if ( \'list\' != $args[\'style\'] )
return;
$indent = str_repeat("\\t", $depth);
$output .= "$indent<ul class=\'children\'>\\n";
}
function end_lvl( &$output, $depth = 0, $args = array() ) {
if ( \'list\' != $args[\'style\'] )
return;
$indent = str_repeat("\\t", $depth);
$output .= "$indent</ul>\\n";
}
function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
extract($args);
$cat_name = esc_attr( $category->name );
$cat_name = apply_filters( \'list_cats\', $cat_name, $category );
$link = \'<a href="\' . esc_url( get_term_link($category) ) . \'"\';
$link .= \'>\';
$link .= $cat_name . \'</a>\';
if ( !empty($feed_image) || !empty($feed) ) {
$link .= \' \';
if ( empty($feed_image) )
$link .= \'(\';
$link .= \'<a href="\' . esc_url( get_term_feed_link( $category->term_id, $category->taxonomy, $feed_type ) ) . \'"\';
$link .= \'>\';
if ( empty($feed_image) )
$link .= $name;
else
$link .= "<img src=\'$feed_image\'$alt$title" . \' />\';
$link .= \'</a>\';
if ( empty($feed_image) )
$link .= \')\';
}
if ( !empty($show_count) )
$link .= \' (\' . intval($category->count) . \')\';
if ( \'list\' == $args[\'style\'] ) {
$output .= "\\t<li";
if ( !empty($current_category) ) {
$_current_category = get_term( $current_category, $category->taxonomy );
if ( $category->term_id == $current_category )
$class .= \'current\';
elseif ( $category->term_id == $_current_category->parent )
$class .= \'current-parent\';
}
$output .= \' class="\' . $class . \'"\';
$output .= ">$link\\n";
} else {
$output .= "\\t$link<br />\\n";
}
}
function end_el( &$output, $page, $depth = 0, $args = array() ) {
if ( \'list\' != $args[\'style\'] )
return;
$output .= "</li>\\n";
}
}
Edit: 我找到了一个解决方法,但我仍然想知道$class的分类名称是从哪里来的。。。
最合适的回答,由SO网友:Daniel 整理而成
Edit: 在查看wp_list_categories()
代码我注意到你可以通过class
函数的参数。如果传递空字符串,内置Walker将始终回音class=""
. 为了摆脱class
属性,您仍然需要使用自定义walker并进行编辑start_el
:
function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
// ...
if ( \'list\' == $args[\'style\'] ) {
$output .= "\\t<li";
if ( !empty($current_category) ) {
$_current_category = get_term( $current_category, $category->taxonomy );
if ( $category->term_id == $current_category )
$class = \'current\'; // removed string operator. not needed here anymore.
elseif ( $category->term_id == $_current_category->parent )
$class = \'current-parent\'; // see above
}
if ( $class ) // skip output if no class is set
$output .= \' class="\' . $class . \'"\';
$output .= ">$link\\n";
} else {
$output .= "\\t$link<br />\\n";
}
// ...
}
每当WordPress运行回调时
start_el
它将传递分类名称(加上默认类)以及其他信息作为第四个参数:
$args
.
要删除默认类,可以在$args
在extract()
生产线:
function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
unset( $args[\'class\'] );
extract($args);
// ...
}
您还需要更改walker设置的代码
$class
删除字符串运算符。
if ( $category->term_id == $current_category )
$class = \'current\';
elseif ( $category->term_id == $_current_category->parent )
$class = \'current-parent\';