1

我有一个带有自定义分类“客户”的类别档案。现在我想按自定义分类的术语(客户名称)订购类别存档。我尝试通过 meta_value 和高级自定义分类查询来查询它,但我无法按分类术语的名称对其进行排序。有什么建议可以获得按分类术语名称排序的 Wordpress 循环吗?见行 $query->set( 'orderby', 'how_to_order_by_taxonomy_name' );

注册分类

add_action( 'init', 'jp_register_project_taxonomies', 0 );
function jp_register_project_taxonomies() {

    // register taxonomy to hold our clients
    register_taxonomy(
        'client',
        array( 'post' ),
        array(
            'hierarchical' => false,
            'public' => true,
            'query_var' => true,
            'rewrite' => true,
            'labels' => array(
                'name'                => _x( 'Clients', 'taxonomy general name' ),
                'singular_name'       => _x( 'Client', 'taxonomy singular name' ),
                'search_items'        => __( 'Search Clients' ),
                'all_items'           => __( 'All Clients' ),
                'edit_item'           => __( 'Edit Client' ), 
                'update_item'         => __( 'Update Client' ),
                'add_new_item'        => __( 'Add New Client' ),
                'new_item_name'       => __( 'New Client Name' ),
                'menu_name'           => __( 'Client' )
            ),
        )
    );
}

pre_get_posts 查询

add_action( 'pre_get_posts', 'jp_project_taxonomy_queries' );

function jp_project_taxonomy_queries( $query ) {

    if(!is_admin() && $query->is_main_query() && is_category() ):

        if (get_query_var('poby') == 'client'):

            $taxonomies = array();
            $tax_order = (get_query_var('po') == 'DESC' ?  'DESC' : 'ASC' );

            foreach (get_terms('client', array('order' => $tax_order)) as $tax ) {
                $taxonomies[] = $tax->name;
            }

            $taxquery = array(
                array(
                    'taxonomy' => 'client',
                    'terms' => $taxonomies,
                    'field' => 'slug',
                )
            );

            $query->set( 'tax_query', $taxquery );
            $query->set( 'orderby', 'how_to_order_by_taxonomy_name' );

        endif;

    endif;

}
4

1 回答 1

0

据我所知,没有参数可以WP_Query按 term排序。

我对这个问题的解决方案通常是创建一个包含术语名称或术语 slug 的元字段。此字段是在使用挂钩save_post或保存帖子时创建的save_post_{post_type}

例如,要按出版年份(分类日期)排序书籍列表(帖子类型书籍),我们可以使用此函数创建元字段:

add_action( 'save_post_book', 'prefix_save_date_as_meta', 10 );
function prefix_save_date_as_meta ($post_id) { 
    $years = get_the_terms($post_id,'date');

    if( empty($years) )
        return;

    $years_list = wp_list_pluck($years,'name');

    update_post_meta($post_id,'_book_date',$years_list[0]);

    return;
}

以及用于订购查询的其他功能:

add_filter( 'pre_get_posts', 'prefix_custom_args_for_loops' );
function prefix_custom_args_for_loops( $query ) {
    if ( !is_admin() && is_post_type_archive('book') && $query->is_main_query() ) {
        $query->set( 'orderby','meta_value_num');
        $query->set( 'meta_key','_book_date');
    }
    return $query;
}
于 2021-02-24T07:30:56.130 回答