按 acf 字段对 graphql 查询进行排序 - React Native / Wordpress

Sorting graphql query by acf field - React Native / Wordpress

致力于 graphQl、React Native、Wordpress 后端项目并努力寻找答案。 我收到一个查询,我想按 ACF 字段排序(或排序)。

我对 graphQl 很陌生,所以我不知道去哪里寻找或搜索什么(如果具体的话)

这是我的查询:

    const queryAllEvent = <Query query={gql`
{posts(where: {categoryNotIn: "12"}) {
    edges {
      node {
        id
        featuredImage {
          node {
            sourceUrl
          }
        }
        title
        prix {
          prix
        }
        content
        date_event {
            time
            dateEvent
          }
        
      }
    }
  }
}
`}

我喜欢按 dateEvent 对其进行排序(或按我所说的排序)。

有线索吗?

不是专门找合适的答案,而是去哪里找。 对不起我的英语。

谢谢

好的,找了半天终于找到了! 答案在这里,谁愿意看呢!

首先,由于javascript和php日期是以毫秒和秒计算的,需要将日期选择器acf转换为正确的值。

/**
 * Convert values of ACF core date time pickers from Y-m-d H:i:s to timestamp
 * @param  string $value   unmodified value
 * @param  int    $post_id post ID
 * @param  object $field   field object
 * @return string          modified value
 */
function acf_save_as_timestamp( $value, $post_id, $field  ) {
    if( $value ) {
        $value = strtotime( $value*1000 );
    }

    return $value;    
}

add_filter( 'acf/update_value/type=date_time_picker', 'acf_save_as_timestamp', 10, 3 );

/**
 * Convert values of ACF core date time pickers from timestamp to Y-m-d H:i:s
 * @param  string $value   unmodified value
 * @param  int    $post_id post ID
 * @param  object $field   field object
 * @return string          modified value
 */
function acf_load_as_timestamp( $value, $post_id, $field  ) {
    if( $value ) {
        $value = date( 'Y-m-d H:i:s', $value*1000 );
    }

    return $value;    
}

add_filter( 'acf/load_value/type=date_time_picker', 'acf_load_as_timestamp', 10, 3 );

之后需要将您的字段添加到 graphql_PostObjectsConnectionOrderbyEnum_values & graphql_post_object_connection_query_args:

add_filter( 'graphql_PostObjectsConnectionOrderbyEnum_values', function( $values ) {

    $values['STARTEVENT'] = [
        'value' => 'startevent',
        'description' => __( 'The date of startevent on the post', 'wp-graphql' ),
    ];

    return $values;

} );

add_filter( 'graphql_post_object_connection_query_args', function( $query_args, $source, $input ) {

    if ( isset( $input['where']['orderby'] ) && is_array( $input['where']['orderby'] ) ) {

        foreach( $input['where']['orderby'] as $orderby ) {

            if ( ! isset( $orderby['field'] ) || 'startevent' !== $orderby['field'] ) {
                continue;
            }

            $query_args['meta_key'] = 'startevent';
            $query_args['orderby'] = 'meta_value_num';
            $query_args['order'] = $orderby['order'];

        }

    }

    return $query_args;

}, 10, 3);

最后你的字段会出现在orderby上(我的字段是startevent)

Capture of result