我正在开发一个系统,其中我有一个甲板演示文稿。我有一个字段,该字段根据“meta_value”数组规范中的“copas”类型的卡片来发布,我希望按照数组中的情况对其进行精确排序:
array('K','Q','J','10','9','8','7','6','5','4','3','2'), 但下一个命令是:
'10','9','8','7','6','5','4','3','2','J','Q','K'我不知道怎么做,你能帮我吗?
$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是我的元框字段:
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是代码的一部分,我在这里查找信件,并显示在屏幕上:
'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:我无法显示原始屏幕的打印,因为每一张卡片都有敏感和受限的数据):

发布于 2018-08-31 15:14:45
看看orderby参数在WP_Query上,我看不出有什么方法可以做到这一点。您可以(如Peter HvD在他的回答中所建议的那样)将您的脸卡转换为数字;但是,如果您想保留K|Q|J值,我建议使用usort()回调:
// 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;
}此代码未经测试。您可能需要对其进行更改,以满足您的特殊需求。
发布于 2018-08-31 15:12:35
您误解了'meta_value'的使用。它用于告诉查询您要搜索的是什么,而不是它应该按照的顺序。
我建议您将dbt_carta中的内部卡值更改为K为13,Q为12,J为11。这将是一个简单的数字排序。
https://wordpress.stackexchange.com/questions/313015
复制相似问题