wordpress 是否按自定义日期字段对元素或循环排序?

tez616oj  于 2023-03-01  发布在  WordPress
关注(0)|答案(2)|浏览(110)

我有一个自定义的帖子类型称为“日期”的事件。在该自定义帖子类型,我有一个ACF日期选择器自定义字段称为“日期-事件”,允许把日期(格式化“ljF”,例如:星期一01三月)的一个事件。我已经包括了元素循环轮播,我需要ASC排序循环的“日期事件”,包括当前日期。
我知道elementor允许使用自定义查询过滤器,但是我的php编程知识-至少可以说-不是很好,我真的不知道如何做到这一点,我在这里读了很多答案,但运气不好。
例如,我发现了这样一段代码,我试图修改它,但它不起作用:

function my_query_by_post_meta( $query ) {

$queried_object = get_queried_object();
$args = array(
        'post_type'     => 'dates',
        'term'          => $queried_object->slug,
        'orderby'       => 'meta_value_num',
        'order'         => ASC,
        'meta_key'      => 'date-event',
        'meta_query'    => array(
            array(
                'key'       => 'date-event'
                )
        )

);
$query = new WP_Query($args);
}
add_action( 'elementor/query/{$query_id}', 'my_query_by_post_meta' );

我试过了,也没有成功:

function my_query_by_post_meta( $query ) {

return array(
 'post_type' => 'dates',
 'post_status' => 'publish',
 'meta_key' => 'date-event',
 'posts_per_page' => 15,
  'orderby'   => 'date-event',
  'order' => 'ASC',
  'sort_custom' => true,
  'meta_query'    => array(
   'relation'      => 'AND',
    array(
    'key' => 'date-event',
          'compare' => '>=',
          'value' => date("Y-m-d"),
          'type' => 'DATE'
    ),
    )
   );
}
add_action( 'elementor/query/{$query_id}', 'my_query_by_post_meta' );

你能帮我一下吗?
谢谢大家!

0tdrvxhp

0tdrvxhp1#

有人加了一个答案,但我不知道为什么,后来把它删掉了。
它对我也不起作用,但我把它贴在这里,只是为了参考:

function my_query_by_post_meta( $query ) {

if ( $query->is_main_query() && ! is_admin() && $query->get( 'post_type' ) === 'dates' ) {

$meta_query = array(
  'relation' => 'AND',
  array(
    'key' => 'date-event',
    'compare' => '>=',
    'value' => date( 'Y-m-d' ),
    'type' => 'DATE'
  ),
);

$query->set( 'orderby', 'meta_value' );
$query->set( 'meta_key', 'date-event' );
$query->set( 'meta_query', $meta_query );
$query->set( 'order', 'ASC' );

}

} add_action( 'pre_get_posts', 'my_query_by_post_meta' );
ovfsdjhp

ovfsdjhp2#

有人帮我解决了这个问题。下面是工作代码:

function my_query_by_post_meta( $query ) {
 if (! is_admin() && $query->get( 'post_type' ) == 'dates' ) {
   $meta_query = array(
     'relation' => 'AND',
     array(
       'key' => 'date-event',
       'compare' => '>=',
       'value' => date( 'Y-m-d' ),
       'type' => 'DATE'
     ),
   );
   $query->set( 'meta_key', 'date-event' );
   $query->set( 'orderby', 'meta_value' );
   $query->set( 'order', 'ASC' );
   $query->set( 'meta_query', $meta_query );
 }
}
add_action( 'pre_get_posts', 'my_query_by_post_meta' );

此外,在小部件中,确保选择Source = CPT(在本例中为“Dates”)。
PS:我试过用插件代码段来做这个,但是没有用。我已经在functions.php中手动添加了它,它是可以的。

相关问题