是否可以按分配的顺序查询帖子?
Is it possible to query posts in the same order as assigned?
我有一个名为 type 的自定义字段,它是 "radio button" 数据类型并且有一些选择。此自定义字段分配给名为 pproduct 的自定义 post 类型。
例如这里是这个自定义字段的选择:
- 红色
- 蓝色
- 黄色
- 白色
- 黑色
以上只能选一个
以下$args
:
$args = array(
'post_type' => 'pproduct',
'posts_per_page' => -1,
'post_status'=>array('publish'),
'product' => $category->slug ,
'meta_query' => array(
'relation' => 'AND',
'type_clause' => array(
'key' => 'type',
),
'order_clause' => array(
'key' => 'order',
),
),
'orderby' => array(
'type_clause' => 'DESC',
'order_clause' => 'ASC',
),
);
将查询 post 类型 pproduct 的所有 post,并按两个自定义字段对其进行排序。 类型 和 顺序 。它将按 字母顺序 顺序对其进行排序。
是否可以修改它并按照分配的 类型 相同的顺序对其进行排序?有谁知道如果我不使用 order by 会发生什么?我可以看到它带来了 posts 但如果不是我分配的 "default order" 是什么。
编辑 1:类似于 this
更新:
我误解了你的需求。如果我现在明白了,你想按照你在设置中分配的方式下订单,就像你写的那样
- 红色
- 蓝色
- 黄色
- 白色
- 黑色
这无法通过 WP 查询参数实现,您必须编写自己的数据库查询来实现此目的,因为查询必须知道您设置的顺序规则(它确实知道字母、数字、日期顺序等等,可以简单地从字段中导出)。
但是,如果您可以将值 ACF 更改为数字(就像您在评论 link 中 post 编辑的那样)您就赢了,那么您将必须创建转换数组(将数字转换为颜色name) 如果你需要使用值作为颜色 name/slug。
所以在 ACF 设置选项中:
- 1:红色
- 2:蓝色
- 3:黄色
- 4:白色
- 5:黑色
查询参数将保持不变(类型排序 DESC->ASC 除外) 如果您需要从数字中获取名称,请在循环中使用它:
$field = get_field_object( 'type' );
$value = $field['value'];
$color_name = $field['choices'][ $value ]; // this will be formated
$unformated_slug = sanitize_title( $color_name ); // change to lowercase and remove whitespaces etc..
// then you can work with $unformated_slug like your original field value eg:
if( $unformated_slug == 'red' ) {
/* do something here */
}
将选择值改为数字是最简单的方法,其他任何方法都太复杂了。
--
post 的默认顺序是按日期。如果您想为所有查询或仅为自定义 post 类型查询自动设置顺序,请参阅 https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
我有一个名为 type 的自定义字段,它是 "radio button" 数据类型并且有一些选择。此自定义字段分配给名为 pproduct 的自定义 post 类型。
例如这里是这个自定义字段的选择:
- 红色
- 蓝色
- 黄色
- 白色
- 黑色
以上只能选一个
以下$args
:
$args = array(
'post_type' => 'pproduct',
'posts_per_page' => -1,
'post_status'=>array('publish'),
'product' => $category->slug ,
'meta_query' => array(
'relation' => 'AND',
'type_clause' => array(
'key' => 'type',
),
'order_clause' => array(
'key' => 'order',
),
),
'orderby' => array(
'type_clause' => 'DESC',
'order_clause' => 'ASC',
),
);
将查询 post 类型 pproduct 的所有 post,并按两个自定义字段对其进行排序。 类型 和 顺序 。它将按 字母顺序 顺序对其进行排序。
是否可以修改它并按照分配的 类型 相同的顺序对其进行排序?有谁知道如果我不使用 order by 会发生什么?我可以看到它带来了 posts 但如果不是我分配的 "default order" 是什么。
编辑 1:类似于 this
更新:
我误解了你的需求。如果我现在明白了,你想按照你在设置中分配的方式下订单,就像你写的那样
- 红色
- 蓝色
- 黄色
- 白色
- 黑色
这无法通过 WP 查询参数实现,您必须编写自己的数据库查询来实现此目的,因为查询必须知道您设置的顺序规则(它确实知道字母、数字、日期顺序等等,可以简单地从字段中导出)。
但是,如果您可以将值 ACF 更改为数字(就像您在评论 link 中 post 编辑的那样)您就赢了,那么您将必须创建转换数组(将数字转换为颜色name) 如果你需要使用值作为颜色 name/slug。 所以在 ACF 设置选项中:
- 1:红色
- 2:蓝色
- 3:黄色
- 4:白色
- 5:黑色
查询参数将保持不变(类型排序 DESC->ASC 除外) 如果您需要从数字中获取名称,请在循环中使用它:
$field = get_field_object( 'type' );
$value = $field['value'];
$color_name = $field['choices'][ $value ]; // this will be formated
$unformated_slug = sanitize_title( $color_name ); // change to lowercase and remove whitespaces etc..
// then you can work with $unformated_slug like your original field value eg:
if( $unformated_slug == 'red' ) {
/* do something here */
}
将选择值改为数字是最简单的方法,其他任何方法都太复杂了。
--
post 的默认顺序是按日期。如果您想为所有查询或仅为自定义 post 类型查询自动设置顺序,请参阅 https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts