Php 是否可以按指定的顺序查询帖子?

Php 是否可以按指定的顺序查询帖子?,php,wordpress,advanced-custom-fields,Php,Wordpress,Advanced Custom Fields,我有一个名为type的自定义字段,这是一个“单选按钮”数据类型,它有一些选择。此自定义字段分配给名为pproduct的自定义帖子类型 例如,以下是此自定义字段的选项: 红色的 蓝色的 黄色的 白色的 黑色的 只能从以上选项中选择一个 下面的$args: $args = array( 'post_type' => 'pproduct', 'posts_per_page' => -1, 'post_status'=>array('publi

我有一个名为type的自定义字段,这是一个“单选按钮”数据类型,它有一些选择。此自定义字段分配给名为pproduct的自定义帖子类型

例如,以下是此自定义字段的选项:

  • 红色的
  • 蓝色的
  • 黄色的
  • 白色的
  • 黑色的
只能从以上选项中选择一个

下面的
$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 typep product的所有帖子,并按两个自定义字段对其进行排序类型顺序。它将按字母顺序对其进行排序

是否可以对其进行修改,并按照指定的类型的相同顺序对其进行排序?有人知道如果我不使用order by会发生什么吗?我可以看到它带来的职位,但什么是“默认顺序”,如果它不是由我指定的

编辑1:类似于更新:

我不理解你的要求。若我现在得到它,你们想按照你们在设置中分配的顺序,就像你们写的一样

  • 红色的
  • 蓝色的
  • 黄色的
  • 白色的
  • 黑色的
使用WP查询参数无法实现这一点,您必须编写自己的数据库查询才能实现这一点,因为查询必须知道您设置的顺序规则(它确实知道字母、数字、日期顺序等,可以简单地从字段派生)

然而,如果您可以将值ACF更改为数值(就像您在评论链接中发布的那样),则如果您需要将值用作颜色名称/段塞,则必须创建转换数组(将数字转换为颜色名称)。 因此,在ACF设置选项中:

  • 1:红色
  • 2:蓝色
  • 3:黄色
  • 4:白色
  • 5:黑色
查询参数将保持不变(除了类型ordering 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 */
}
将选择值更改为数字是最简单的方法,其他任何方法都太复杂

--

默认的发布顺序是按日期。如果要为所有查询自动设置订单,或仅为自定义帖子类型查询设置订单,请参见更新:

我不理解你的要求。若我现在得到它,你们想按照你们在设置中分配的顺序,就像你们写的一样

  • 红色的
  • 蓝色的
  • 黄色的
  • 白色的
  • 黑色的
使用WP查询参数无法实现这一点,您必须编写自己的数据库查询才能实现这一点,因为查询必须知道您设置的顺序规则(它确实知道字母、数字、日期顺序等,可以简单地从字段派生)

然而,如果您可以将值ACF更改为数值(就像您在评论链接中发布的那样),则如果您需要将值用作颜色名称/段塞,则必须创建转换数组(将数字转换为颜色名称)。 因此,在ACF设置选项中:

  • 1:红色
  • 2:蓝色
  • 3:黄色
  • 4:白色
  • 5:黑色
查询参数将保持不变(除了类型ordering 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 */
}
将选择值更改为数字是最简单的方法,其他任何方法都太复杂

--


默认的发布顺序是按日期。如果要为所有查询自动设置订单,或仅为自定义帖子类型查询设置订单,请参见

了解默认订单很好,但不能接受此作为答案。我的问题与你的答案无关。请告诉我你想达到什么样的目的。Orderby优先使用其数组内容,因此首先使用第一个声明,然后使用第二个声明,等等。我不希望它按字母顺序排列ASC,而是按“分配”顺序排列ASC。我所说的指派是指我提到的清单。第一个(红色),第二个(蓝色),第三个(黄色)。。等检查我在底部的问题,发现类似的东西。你说的方式让我困惑。编辑我的问题的查询难道不可能吗?通过增加字段数?我认为这不可能像你想的那样。但您可以尝试使用ACF字段命名,如果它是按升序创建的,您可以尝试使用它。查看数据库中的PosteTa表,可以看到每个注册的自定义字段都有另一个前缀为“u”的已注册字段。我不知道这段代码是如何生成的,如果它的格式可能用于排序,你必须尝试一下。了解默认排序很好,但我不能接受这个答案。我的问题与你的答案无关。请告诉我你想达到什么样的目的。Orderby优先使用其数组内容,因此首先使用第一个声明,然后使用第二个声明,等等。我不希望它按字母顺序排列ASC,而是按“分配”顺序排列ASC。我所说的指派是指我提到的清单。第一个(红色),第二个(蓝色),第三个(黄色)。。等检查我在底部的问题,发现类似的东西。你说的方式让我困惑。编辑我的问题的查询难道不可能吗?通过增加字段数?我认为这不可能像你想的那样。但您可以尝试使用ACF字段命名,如果它是按升序创建的,您可以尝试使用它。查看数据库中的PosteTa表,可以看到每个注册的自定义字段都有另一个前缀为“u”的已注册字段。我不知道这段代码是如何生成的,如果它的格式可能用于订购,您必须尝试一下。