我有一种不同的邮政订单,我试图返回,但我找不到任何有答案的地方。我使用wp_query尝试按元值列表排序帖子。然而,非标准orderby选项做什么,我试图实现。
我的元值存储为逗号列表字符串,如下所示:
1, 5, 10, 3, 21, 6
然后我获取这些值并将其分解为如下数组:
$banner_nums = get_option('banner_numbers');
$nums_array = explode( ',', $banner_nums );
我做了一个标准的wp_query,但问题是,我试图按照我的$banner_nums变量中的实际顺序来排列这些帖子的显示顺序,而不是按照任何正常的wp_query顺序,如“ID”、“日期”、“标题”、“meta_value”等。
像这样显示:
第1个:meta_值为1的帖子
第二:meta_value的帖子=5
第三:meta_值为10的帖子
第4名:meta_value=3
第五:meta_值为21的帖子
第六:meta_value的帖子=6
例如,如果我想将meta_值为6的文章显示为第二篇文章,我会将列表更改为:1、6、5、10、3、21。
这是我的查询,它抓住了我的帖子很好,我只是不能让它们正确排序。
$slider_args = array(
'post_type' => 'property',
'posts_per_page' => -1,
'nopaging' => true
);
$my_query = array();
foreach( $nums_array as $k => $v ) {
$my_query[$k]['key'] = 'property_id';
$my_query[$k]['value'] = $v;
$my_query[$k]['compare'] = '=';
}
$slider_args['meta_query'] = $my_query;
$slider_args['meta_query']['relation'] = 'OR';
$slider_query = new WP_Query( $slider_args );
if ( $slider_query->have_posts() ) {
stuff...
}
打印我的slider_args看起来像这样,看起来很好:
[post_type] => property
[posts_per_page] => -1
[nopaging] => 1
[meta_query] => Array
(
[0] => Array
(
[key] => property_id
[value] => 1
[compare] => =
)
[1] => Array
(
[key] => property_id
[value] => 5
[compare] => =
)
[2] => Array
(
[key] => property_id
[value] => 10
[compare] => =
)
[3] => Array
(
[key] => property_id
[value] => 3
[compare] => =
)
[4] => Array
(
[key] => property_id
[value] => 21
[compare] => =
)
[5] => Array
(
[key] => property_id
[value] => 6
[compare] => =
)
[relation] => OR
)
我就是不知道如何以正确的顺序显示帖子
1, 5, 10, 3, 21, 6
我希望我说得有道理?任何帮助都非常感谢。
谢谢格雷格的意见。我用的是“orderby”=
$banner_nums = get_option('banner_numbers');
$numbers = explode( ',', $banner_nums );
// ** new code
$wpIds = array();
// need post ids to keep the sort order same as in string above
foreach( $numbers as $num) {
$args = array(
'post_type' => 'property',
'meta_query' => array(
array(
'key' => 'property_id',
'value' => $num
)
)
);
$getPosts = new WP_Query($args);
if( $getPosts->have_posts() ) {
while( $getPosts->have_posts() ) {
$getPosts->the_post();
// builds array of posts IDs in same order as $numbers array above.
array_push($wpIds, get_the_ID());
} // end while
}
}
// ** end new code
$slider_args = array(
'post_type' => 'property',
'posts_per_page' => -1,
'nopaging' => true,
'post__in' => $wpIds, // ** new code
'orderby' => 'post__in'
);
$my_query = array();
foreach( $numbers as $k => $v ) {
$my_query[$k]['key'] = 'property_id';
$my_query[$k]['value'] = $v;
$my_query[$k]['compare'] = '=';
}
$slider_args['meta_query'] = $my_query;
$slider_args['meta_query']['relation'] = 'OR';
$slider_query = new WP_Query( $slider_args );
是的,这是一个昂贵的查询,但对于我来说,使用它构建一个包含2-6张幻灯片的主页滑块,我可以处理它。
为了帮你解决这个问题,我自己学到了一些新东西:)
显然,从WP 3.5开始,您可以在创建WP_Query时指定post__in的orderby参数
https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters
因此,我认为您可以做的基本上是拦截具有您需要的元数据的post ID,并将这些ID按照在您的元数据数组中指定的顺序放入数组中。然后,如果对该数组执行WP_查询,请传入参数:
'orderby' => 'post__in'
现在,正如另一位评论者所指出的,这可能是一个相当昂贵的操作,因此您希望将结果缓存到瞬态并使用该输出,而不是在每次加载页面时运行此查询:
https://codex.wordpress.org/Transients_API
使用下面的代码,我列出了自定义帖子类型“人物”下的所有帖子 下面是我的页码, 我还创建了一个插件,使用上面的代码在边栏中显示标题列表。因此,每当我访问mysite.com/people这两个网站时(即带有分页的自定义帖子列表 若我转到第二页,侧边栏显示为空。 有人知道我哪里出错了吗?
我创建了一个归档页面,我的'事件'自定义帖子猿archive-event.php.我使用的内容从标准archive.php模板,它列出了我的4个事件的顺序,他们被张贴。 下一步是按自定义字段event_date更改订单。我这样做没有问题。然后我不想显示任何事件的日期已经过去。下面的代码完美地实现了这一点。 我现在的问题是我的分页都搞砸了。我的默认阅读设置为每页2篇文章,我有一个“加载更多”按钮来显
null 我希望能够从数组中获取某些元值,例如、、、、等。 这个PHP代码段将添加一个字段的订单电子邮件,但我如何编辑这一点,我可以让它显示一些元从数组? 对于特定的WooCommerce订单,我使用 这表明:
我有一个自定义后类型设置称为艺术家。每个单个艺术家是一个页面(艺术家个人资料,如果你愿意),有一个通过高级自定义字段(ACF)的关系字段类型与该艺术家相关联的产品列表。我需要产品在艺术家页面上显示在他们的类别中。因此,在Elementor中,我需要指定一个查询筛选器ID,以简单地将产品划分为类别。 到目前为止我所尝试的 我试图通过自定义查询仅显示列表中特定类别的产品,因为我需要生成查询ID。 我一
我希望有人能帮我创建我需要的查询。我引用这个留档的元素或额外的小部件,“额外的帖子”:https://developers.elementor.com/custom-query-filter/ 现在,我可以在编辑器中设置查询以显示来自多个类别的帖子。问题是,查询显示来自“红色”或“蓝色”的帖子。我需要查询来显示标记为“红色”和“蓝色”的帖子。 我使用自定义帖子类型和自定义类别,这似乎是有意义的例子
我创建了一个WordPress自定义帖子类型,然后我创建了REST API自定义endpoint以获取所有帖子运行良好。然后我创建了另一个自定义endpoint以按ID获取单个帖子。例如http://localhost:8888/wordpress/wp-json/lc/v1/cars/120 我已经创建了一些帖子,每次我将路线末端的ID更改为118或116时,它都会显示最新的post-ID 12