为最终用户直观地排序“自定义帖子类型”


9

现在有了那些不需要按日期按时间顺序组织的自定义帖子类型和其他内容,例如:客户有100个T恤作为自定义帖子类型“ SHIRT”,他想设置其出现顺序。

您建议采用哪种方法让站点SORT的编辑/管理员下达命令?


您能举例说明他想对哪种类型的东西进行排序吗?对于某些事情,某些答案可能比其他答案更好。
MikeSchinkel 2010年

迈克:也许是他希望确定要成为第一名的T恤,或者通常是用户插入的帖子顺序不正确。
阿米特(Amit)2010年

对于那些仍然在本文中搜索的人,有一些不错的WP插件可以解决此问题。我刚刚实现了这一点:wordpress.org/extend/plugins/post-types-order

Answers:



3

您可以过滤分类法

        // to filter by category
    function restrict_manage_posts() {
        global $typenow;

        if ( FB_CPT_POST_TYPE_1 == $typenow ) {
            $args = array('orderby' => 'count', 'hide_empty' => true);
            echo $this->get_taxonomy_html_select(FB_CPT_TAXONOMY_TYPE_1, $args);
        }
    }

    function get_taxonomy_html_select($taxonomy_name, $args) {

        $taxonomy = get_taxonomy($taxonomy_name);
        $terms = get_terms($taxonomy_name, $args);
        $label = __( 'Show all ' . $taxonomy->label, FB_CPT_TEXTDOMAIN );
        $html = array();
        $html[] = '<select style="min-width:155px;" id="' . $taxonomy_name . '" name="' . $taxonomy_name . '" class="postform">';
        $html[] = '<option value="0">' . $label . '</option>';
        if ( isset($_GET[$taxonomy_name]) )
            $this_term = $_GET[$taxonomy_name];
        else
            $this_term = '';
        foreach($terms as $term) {
            $default = ( $this_term == $term->term_id ? ' selected="selected"' : '' );
            $value = esc_attr($term->name);
            $value = $value . '&nbsp;&nbsp;(' . (int)$term->count . ')';
            $html[] = "\t" . '<option value="' . $term->term_id . '"' . $default . '>' . $value . '</option>';
        }
        $html[] = '</select>' . "\n";
        return implode( "\n", $html );
    }

    function request($request) {
        global $pagenow;

        if ( is_admin() && 'edit.php' == $pagenow && isset( $request[FB_CPT_TAXONOMY_TYPE_1] ) && FB_CPT_POST_TYPE_1 == $request[FB_CPT_TAXONOMY_TYPE_1] ) {
            $request['taxonomy'] = FB_CPT_TAXONOMY_TYPE_1;
            $request['term'] = get_term($request[FB_CPT_TAXONOMY_TYPE_1], FB_CPT_TAXONOMY_TYPE_1)->name;
            unset($request['name']);
        }

        return $request;
    }

用这个钩子

            // to filter custom post type per custom taxonomy
        add_action( 'restrict_manage_posts', array( &$this, 'restrict_manage_posts') );
        add_action( 'request', array( &$this, 'request' ) );

我尝试实现它,但对我来说不起作用..我应该采取任何先前的措施吗?宣布一些分类法?谢谢!
阿米特(Amit)2010年

这是我班上自定义帖子类型的示例;您必须更改数组(&this等),以免在类中使用,常量FB_CPT_TAXONOMY_TYPE_1是我的第一个自定义分类法,以此类推,常量FB_CPT_POST_TYPE_1是我的第一个自定义帖子类型
bueltge 2010年

请参阅以下答案(wordpress.stackexchange.com/questions/45/…),类似
bueltge 2010年

我了解。。我可能没有很好地解释自己-我的意思是让用户设置排序顺序,而这个新顺序应反映在前端。我实际上正在寻找的是类似于新菜单gui的东西,但用于帖子/自定义帖子类型。
阿米特(Amit)2010年

0

我将查看菜单生成器管理屏幕。由于菜单只是自定义帖子类型,因此我确信其中一些内容可以用作启发。


这根本不是一个坏主意,但是菜单中是否包含无限数量的项目(超过100个)?每个帖子都有一个条目条目会不会有点膨胀?
阿米特

0

为了使o具有真正任意的排序顺序(与任何发布字段完全无关),您需要创建一个“排序值”(或“重量”)字段,并为该字段中的每个项目输入一个数值。然后,您可以在该字段上排序。


0

如果您只想为每个“衬衫”设置一个位置,那么为什么不只使用菜单顺序,又可以在WP_Query中按menu_order进行排序。您可能必须制作一个用于设置帖子menu_order属性的元框。然后在您的WP_Query

$shirts = new WP_Query( 'post_type=shirt&orderby=menu_order&order=ASC' );

这将类似于您Media Upload为设置页面的菜单顺序在“ 图库”选项卡中订购图像的方式。

还是我误会了什么?


您说得对,但是想起用户..他需要手动转到每个帖子并在meta框中设置一个数字..不是很友好..
Amit 2010年

将其合并到快速编辑中将使此操作变得容易得多,但是可以,这可能很耗时。
Joe Hoyle 2010年

0

如果我要在插件或代码中创建帖子类型,我想做的就是添加此代码,这使您可以设置前端和后端的默认顺序,还可以在admin中设置GET变量,如果您按标题,日期或在管理表中显示的其他任何内容进行排序,则WordPress管理员可以识别更改并向上箭头。

add_filter( 'pre_get_posts' , 'my_cpt_order' ); // Runs before the posts are fetched
function my_cpt_order( $query ) {
    // Check query and alter only the query needed
    //echo '<PRE>'; print_r($query); echo '</PRE>'; 
    if ($query->query['post_type'] == 'cpt' && !isset($query->query['orderby'])) {
        $query->set( 'orderby' , 'title' );
        $query->set( 'order' , 'asc' );
        //get the arrow to show up over title in admin
        if (is_admin()) {
            $_GET['orderby'] = 'title';
            $_GET['order'] = 'asc';
        }
    } //if
} //my_cpt_order

由于menu_order是默认设置,因此如果您要按menu_order对自定义帖子类型进行排序,则不需要此选项,但是如果您不想让用户担心自己进行排序并且希望使用诸如title之类的帖子类型,则不需要,非常方便。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.