使用自定义分类术语数组订购帖子

时间:2014-02-17 作者:davehudson52

我无法在我的循环中获得我帖子的顺序(按自定义税务术语组织)。

我定制了一个“staff”的post类型,在staff中有一个“staff title”的自定义分类法。

我添加了诸如“主编”、“总编辑”、“诗歌编辑”等术语(类似于为客户保持UI整洁的类别)。其想法是客户可以进入“员工”职位类型,创建以员工名字命名的职位,然后检查他们担任的职位,然后这些职位将按正确的顺序显示(通过运行命令链显示职位)。

下面是在函数中创建自定义税的函数。php:

function add_custom_taxonomies() {
    // Add new "Locations" taxonomy to Posts
    register_taxonomy(\'staff-title\', \'staff\', array(
        // Hierarchical taxonomy (like categories)
        \'hierarchical\' => true,
        // This array of options controls the labels displayed in the WordPress Admin UI
        \'labels\' => array(
            \'name\' => _x( \'Staff Titles\', \'taxonomy general name\' ),
            \'singular_name\' => _x( \'Title\', \'taxonomy singular name\' ),
            \'search_items\' =>  __( \'Search Titles\' ),
            \'all_items\' => __( \'All Titles\' ),
            \'parent_item\' => __( \'Parent Title\' ),
            \'parent_item_colon\' => __( \'Parent Title:\' ),
            \'edit_item\' => __( \'Edit Title\' ),
            \'update_item\' => __( \'Update Title\' ),
            \'add_new_item\' => __( \'Add New Title\' ),
            \'new_item_name\' => __( \'New Title Name\' ),
            \'menu_name\' => __( \'Staff Titles\' ),
        ),
        // Control the slugs used for this taxonomy
        \'rewrite\' => array(
            \'slug\' => \'locations\', // This controls the base slug that will display before each term
            \'with_front\' => false, // Don\'t display the category base before "/locations/"
            \'hierarchical\' => true // This will allow URL\'s like "/locations/boston/cambridge/"
        ),
    ));

}
add_action( \'init\', \'add_custom_taxonomies\', 0 );
这是我在员工页面上的WP\\U查询。。。

$args = array(
    \'post_type\' => \'staff\',
    \'tax_query\' => array(
        array(
               \'taxonomy\' => \'staff-title\',
               \'field\' => \'slug\',
               \'terms\' => array(\'editor-in-chief\', \'managing-editor\', \'fiction-editor\', \'poetry-editor\', \'nonfiction-editor\', \'production-manager\' )
        )
    ),
        \'posts_per_page\' => \'-1\',
        \'order\' => \'ASC\',
        \'orderby\' => \'meta_value_num\'
);

$my_query = new WP_Query( $args );
tax\\u查询“terms”=>数组(…)按显示顺序列出了术语(员工职位),但事实并非如此。

访问员工页面时,帖子按以下顺序显示,但顺序错误:

总编辑-陈静恩(Ching in Chen)总编辑-莎娜·马丁内斯(Shanae Martinez)制片经理-马修·莫里斯·库克(Matthew Morris Cook)非小说类编辑-凯特·奈斯海姆(Kate Nesheim)诗歌编辑-C.麦卡利斯特·威廉姆斯(C.McCallister Williams)诗歌编辑-卡拉·范德格拉夫(Kara van de Graaf)小说编辑-洛蕾塔·麦考密克(Loretta McCormick)小说编辑-莫莉·布特尔(Mollie Boutell)

以下是正确的顺序,仅供参考(与税务查询术语数组的顺序相同):

总编辑-陈静恩主编-莎娜·马丁内斯小说编辑-洛蕾塔·麦考密克小说编辑-莫莉·布特尔诗歌编辑-C·麦考利斯特·威廉姆斯诗歌编辑-卡拉·范德格拉夫非小说编辑-凯特·奈斯海姆制作经理-马修·莫里斯·库克

我列出了员工的名字,因为他们是各个职位的头衔,我认为他们可能是问题的一部分。

有人对我如何解决这个问题有什么想法吗?如果您需要更多信息,请告诉我,我很乐意提供。提前感谢!

3 个回复
SO网友:kaiser

已经是hierarchical post类型-仅为订单不需要一些额外的元数据。您只需添加post type support 对于page-attributes 注册帖子类型时。这将为您提供页面默认的“菜单顺序”元框。

然后,只需按它排序查询:

\'orderby\' => \'menu_order\'

SO网友:Milo

不能按分类术语对WP_Query. 你可以用一些custom SQL, 但是,如果这些术语是硬编码到查询中的,只需按您想要的顺序迭代一个术语数组,然后针对每个术语在其中的帖子上循环,并检查它是否与该术语关联-

$args = array(
    \'post_type\' => \'staff\',
    \'posts_per_page\' => \'-1\'
);
$my_query = new WP_Query( $args );
$terms = array(
    \'editor-in-chief\',
    \'managing-editor\',
    \'fiction-editor\',
    \'poetry-editor\',
    \'nonfiction-editor\',
    \'production-manager\'
);
foreach( $terms as $term ){
    while( $my_query->have_posts() ){
        $my_query->the_post();
        if( has_term( $term ) ){
            // output post
        }
    }
    $my_query->rewind_posts();
}

SO网友:iantsch

另一个解决方法是自定义post元字段,其中包含所有可用的分类术语staff-title. 在您的帖子的保存操作中,您甚至可以添加对您的后期关系的处理。

function my_staff_title_term_meta_box($post) {
    $staff_title= get_post_meta($post->ID, \'_staff_title_term_slug\', true);
    $terms = get_terms(\'staff-title\', array(\'hide_empty\' => false));
    // your term slugs are the ones manipulating the order, e.g. title-1 for the first title to appear and so on…
    echo "<select name=\'staff_title_term_slug\' id=\'staff_title_term_slug\'>";
    echo "<option value=\'\'".(empty($staff_title)?" selected=\'selected\'":\'\').">".__(\'No staff title\', \'my_textdomain\')."</option>";
    if (!empty($terms) && is_array($terms)) foreach ($terms as $term) {
        echo "<option value=\'{$term->slug}\'".(!empty($staff_title) && $staff_title == $term->slug?" selected=\'selected\'":\'\').">{$term->name}</option>";
    }
    echo "</select>";
}

function add_my_staff_title_term_meta_box() {
    add_meta_box(
        \'my-staff-title-term\',
        __(\'Staff Title\',\'my_textdomain\'),
        \'my_staff_title_term_meta_box\',
        \'staff\',
        \'side\',
        \'low\'
    );
}

add_action( \'add_meta_boxes\', \'add_my_staff_title_term_meta_box\');

function save_my_stuff_title_term($post_id) {
    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
        return;
    if ( !current_user_can( \'edit_post\', $post_id ) )
        return;
    if ($_POST[\'staff_title_term_slug\']) {
        update_post_meta($post_id, \'_staff_title_term_slug\', $_POST[\'staff_title_term_slug\']);
    } else {
        delete_post_meta($post_id, \'_staff_title_term_slug\');
    }
    //TODO: Additionally handling ticked staff title terms, e.g. overwrite them with chosen slug
}

add_action( \'save_post\', \'save_my_stuff_title_term\' );
在前端查询中,可以按post元字段排序。

function filter_my_staff_query( $query ) {
    if ( $query->is_main_query() && $query->is_archive() && $query->get(\'post_type\') === \'staff\'  && !is_admin()) {
        $query->set(\'meta_key\', \'_staff_title_term_slug\');
        $query->set(\'orderby\', \'meta_value\');
    }
}

add_action( \'pre_get_posts\', \'filter_my_staff_query\' );

结束

相关推荐

想要wp_get_post_Terms以任意顺序返回,该怎么办?

下面的函数按字母顺序返回,而不是按任意顺序返回是否可以-不-按字母顺序返回,但按数组中给出的确切顺序返回?add_filter(\'the_content\', \'my_function\'); function my_function($content) { if ( is_single() && in_category( \'5\' ) ) { the_post_thumbnail(\'thumbnail\', array(\'class\' => \'