【问题标题】:Adding a Taxonomy Filter to a Custom Post Type将分类过滤器添加到自定义帖子类型
【发布时间】:2012-09-01 15:35:50
【问题描述】:

大约两年前,在 Wordpress Answer 网站上有一个 amazing conversation,许多人提出了很好的解决方案,可以为您的自定义帖子类型添加分类过滤器到管理屏幕(请参阅屏幕 I' m 指):

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

【问题讨论】:

    标签: php wordpress


    【解决方案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>";
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      Try this class,效果很好

      【讨论】:

        猜你喜欢
        • 2020-11-17
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 2011-11-19
        • 2014-11-11
        • 2019-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多