0

大约两年前在 Wordpress Answer 网站上进行了一次精彩的对话,其中许多人提出了很好的解决方案,可以为您的自定义帖子类型添加分类过滤器到管理屏幕(请参阅我所指的屏幕的 URL) :

http://[yoursite.com]/wp-admin/edit.php?s&post_status=all&post_type=[post-type]

无论如何,我喜欢 Michael 的出色贡献,但最终还是使用了 Somatic 的实现以及 Manny 的层次结构选项。我把它放在一个班级里——因为这就是我喜欢做的事情——而且它几乎可以工作。下拉列表出现,但下拉列表中的值都在 $_GET 属性中查找您正在过滤的分类 slug-name。出于某种原因,我什么也得不到。我查看了下拉列表的 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

在从动作过滤器中选择“开始运行”作为选项的同时按下过滤器按钮后:

/wp-admin/edit.php?s&post_status=all&post_type=exercise&action=-1&m=0&actions&paged=1&mode=list&action2=-1

实际上,您可以看到对“操作”变量的引用,但它被设置为空,正如我现在详细查看的那样,当我在页面上点击“过滤器”时,它会将过滤器下拉重置为默认的“显示全部”行动”。谁能帮我这个?

顺便说一句,我在这里附上了 PHP 代码(尽管我现在开始倾向于它是一个 js 问题):gist

4

2 回答 2

2

我遇到了同样的问题并添加了一个小修复,基本上检查是否设置了分类 $_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>";
        }
    }
}
于 2013-01-27T19:35:33.457 回答
0

试试这门课,效果很好

于 2014-07-24T13:58:20.027 回答