首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(解决了) WP_Query ($ args) ->如何在同一个数组中排序字母和数字

(解决了) WP_Query ($ args) ->如何在同一个数组中排序字母和数字
EN

WordPress Development用户
提问于 2018-08-31 13:39:40
回答 2查看 854关注 0票数 1

我正在开发一个系统,其中我有一个甲板演示文稿。我有一个字段,该字段根据“meta_value”数组规范中的“copas”类型的卡片来发布,我希望按照数组中的情况对其进行精确排序:

代码语言:javascript
复制
array('K','Q','J','10','9','8','7','6','5','4','3','2'),  

但下一个命令是:

代码语言:javascript
复制
'10','9','8','7','6','5','4','3','2','J','Q','K'

我不知道怎么做,你能帮我吗?

代码语言:javascript
复制
$args = array(
                        'post_type' => 'copas',
                        'posts_per_page' => '12',
                        'meta_key' => 'dbt_carta',
                        'meta_value' => array('K','Q','J','10','9','8','7','6','5','4','3','2'),
                        'compare' => 'LIKE',
                        'orderby' => 'meta_value_num',
                        'order' => 'DESC'
                    );

                    // A Query
                    $cartas = new WP_Query( $args );

请记住,我需要它是这样的顺序,因为然后另一个过滤器将出现在$ args中,因为卡片将具有活动/非活动状态,并且它们必须始终按照数组的顺序而不是按post的顺序。

如@PatJ所示,它非常有效,我很感谢大家的帮助!Below的结果

This是我的元框字段:

代码语言:javascript
复制
array(
            //Texto referente ao campo | ponto (N)
            'name' => 'Carta',

            //Texto de exemplo
            'desc' => 'Selecione a Carta',

            //SEMPRE MUDE - Nome registrado no Banco de dados
            'id' => $prefix . 'carta',

            //NÃO MUDE 
            'type' => 'select',

            'options' => array('A','K','Q','J','10','9','8','7','6','5','4','3','2')
        )

This是代码的一部分,我在这里查找信件,并显示在屏幕上:

代码语言:javascript
复制
                 'copas', 
                    'posts_per_page' => '1',
                    'meta_key' => 'dbt_carta',
                    'meta_value' => 'A'
                );

                // A Query
                $carta_as = new WP_Query( $args_A );

                // O Loop
                while ( $carta_as->have_posts() ) : $carta_as->the_post();

                    $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' ); 
                    ?>
                    
                        
                    
                
                
            
            

            
                
                 'copas',
                    'posts_per_page' => '12',
                    'meta_key' => 'dbt_carta',
                    'meta_value' => array('K','Q','J','10','9','8','7','6','5','4','3','2'),
                    'compare' => 'LIKE'
                );

                // A Query
                $cartas = new WP_Query( $args );
                usort( $cartas->posts, 'sort_cartas' );

                function sort_cartas( $a, $b ) {
                    $single = true;
                    $a_dbt_carta = get_post_meta( $a->ID, 'dbt_carta', $single );
                    $b_dbt_carta = get_post_meta( $b->ID, 'dbt_carta', $single );
                    // If they're the same, don't worry about sorting.
                    if ( $a_dbt_carta == $b_dbt_carta ) {
                        return 0;
                    }
                    // Converts 'K', 'Q', and 'J' to numbers, for easier comparisons.
                    $face_card_numbers = array( 'K' => 13, 'Q' => 12, 'J' => 11 );
                    if ( in_array( $a_dbt_carta, array_keys( $face_card_numbers ) ) ) {
                        $a_dbt_carta = $face_card_numbers[ $a_dbt_carta ];
                    }
                    if ( in_array( $b_dbt_carta, array_keys( $face_card_numbers ) ) ) {
                        $b_dbt_carta = $face_card_numbers[ $b_dbt_carta ];
                    }
                    if ( $a_dbt_carta > $b_dbt_carta ) {
                        return -1;
                    }
                    return 1;
                }


                if ($cartas->have_posts()) :  while ($cartas->have_posts()) :  $cartas->the_post(); 
                    $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' ); 
                    ?>
                    
                        
                    

                    

                    
                    

                    

                
            

                Não existe conteúdo aqui!

This是我想要的结果的表示(PS:我无法显示原始屏幕的打印,因为每一张卡片都有敏感和受限的数据):

EN

回答 2

WordPress Development用户

回答已采纳

发布于 2018-08-31 15:14:45

看看orderby参数在WP_Query上,我看不出有什么方法可以做到这一点。您可以(如Peter HvD在他的回答中所建议的那样)将您的脸卡转换为数字;但是,如果您想保留K|Q|J值,我建议使用usort()回调:

代码语言:javascript
复制
// Assuming that $cartas->posts contains your posts
usort( $carta->posts, 'wpse313015_sort_cartas' );

// ...

function wpse313015_sort_cartas( $a, $b ) {
    $single = true;
    $a_dbt_carta = get_post_meta( $a->ID, 'dbt_carta', $single );
    $b_dbt_carta = get_post_meta( $b->ID, 'dbt_carta', $single );
    // If they're the same, don't worry about sorting.
    if ( $a_dbt_carta == $b_dbt_carta ) {
        return 0;
    }
    // Converts 'K', 'Q', and 'J' to numbers, for easier comparisons.
    $face_card_numbers = array( 'K' => 13, 'Q' => 12, 'J' = 11 );
    if ( in_array( $a_dbt_carta, array_keys( $face_card_numbers ) ) ) {
        $a_dbt_carta = $face_card_numbers[ $a_dbt_carta ];
    }
    if ( in_array( $b_dbt_carta, array_keys( $face_card_numbers ) ) ) {
        $b_dbt_carta = $face_card_numbers[ $b_dbt_carta ];
    }
    if ( $a_dbt_carta > $b_dbt_carta ) {
        return -1;
    }
    return 1;
}

此代码未经测试。您可能需要对其进行更改,以满足您的特殊需求。

票数 1
EN

WordPress Development用户

发布于 2018-08-31 15:12:35

您误解了'meta_value'的使用。它用于告诉查询您要搜索的是什么,而不是它应该按照的顺序。

我建议您将dbt_carta中的内部卡值更改为K为13,Q为12,J为11。这将是一个简单的数字排序。

票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/313015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档