大约两年前,在Wordpress应答网站上有一个amazing conversation,其中有很多人想出了一个很好的解决方案,可以在自定义帖子类型的管理界面添加分类过滤器(请参阅屏幕的URL)我指的是):
http://[yoursite.com]/wp-admin/edit.php?s&post_status=all&post_type=[post-type]
无论如何,我喜欢Michael的精彩贡献,但最终使用了Manny的层次结构选项来实现Somatic的实现。我把它包装在一个类中 - 因为我喜欢做的事情 - 它几乎可以工作。下拉列表出现,但下拉列表中的值都在查看您要过滤的分类法slug-name的$ _GET属性。出于某种原因,我什么都没得到。我查看了下拉列表的HTML,对我来说似乎没问题。这是一些上下文的快速截图:
你可以从中判断出我的帖子类型被称为“练习”,我试图用作过滤器的分类法是“动作”。然后是下拉列表周围的HTML:
<select name="actions" id="actions" class="postform">
<option value="">Show all Actions</option>
<option value="ate-dinner">Ate dinner(1)</option>
<option value="went-running">Went running(1)</option>
</select>
我还确认所有表单元素都在DOM的部分内。然而,如果我选择“运行”并单击过滤器按钮,则URL查询字符串将返回,而不会引用我所选择的内容。
更明确地说,页面首先使用以下URL加载:
/wp-admin/edit.php?post_type=exercise
并在从操作过滤器选择“Went Running”作为选项时按下过滤器按钮:
/wp-admin/edit.php?s&post_status=all&post_type=exercise&action=-1&m=0&actions&paged=1&mode=list&action2=-1
实际上,您可以看到对“actions”变量的引用,但它设置为空,我现在详细看看,当我点击页面上的“过滤器”时,它会将过滤器重置为默认值“显示所有操作”。谁能帮我这个?
顺便说一句,我已经在这里附上了PHP代码(尽管我现在开始倾向于将其作为js问题):gist。
答案 0 :(得分:1)
我遇到了同样的问题并添加了一个小修补程序,基本上检查是否设置了分类法$ _GET参数。我希望它有所帮助:
add_action( 'restrict_manage_posts', 'my_restrict_manage_posts' );
function my_restrict_manage_posts() {
global $typenow;
$taxonomy = 'mytaxonomy'; // Change this
if( $typenow != "page" && $typenow != "post" ){
$filters = array($taxonomy);
foreach ($filters as $tax_slug) {
$tax_obj = get_taxonomy($tax_slug);
$tax_name = $tax_obj->labels->name;
$terms = get_terms($tax_slug);
echo "<select name='$tax_slug' id='$tax_slug' class='postform'>";
echo "<option value=''>Show All $tax_name</option>";
foreach ($terms as $term) {
$label = (isset($_GET[$tax_slug])) ? $_GET[$tax_slug] : ''; // Fix
echo '<option value='. $term->slug, $label == $term->slug ? ' selected="selected"' : '','>' . $term->name .' (' . $term->count .')</option>';
}
echo "</select>";
}
}
}
答案 1 :(得分:0)
Try this class,它很棒