1

对于那些熟悉 ACF 插件的人...

我有一些当前以发布顺序显示的事件帖子(请参见下面的代码)。我希望它们按日期选择器指定的顺序显示。

谁能告诉我下面要修改什么 - 我已经尝试过网站上的文档,但我的 PHP 是基本的。

它说我需要添加

'orderby' => 'meta_value_num',

但没有喜悦。

<?php function le_whatson_aside() {

//THis loop is for the CPT
$args = array(
    'post_type' => 'events', // enter your custom post type
    'orderby' => 'menu_order',
    'order' => 'ASC',
    'posts_per_page'=> '10',  // overrides posts per page in theme settings
        'tax_query' => array(
        array(
            'taxonomy' => 'audience', //name of custom taxonomy
            'field' => 'slug',
            'terms' => 'everyone' //name of category
        )
    )

    );

$loop = new WP_Query( $args );
if( $loop->have_posts() ):
    ?>

    <div>
        <h2>What's On</h2>
    </div>
    <div class="whatson entry-content"> 
        <?php   
        while( $loop->have_posts() ): $loop->the_post(); global $post;
            ?>
            <p class="whatson-date"><?php echo date("dS F Y",strtotime(get_field('date')));?></p>
            <a  href="<?php echo get_permalink() ?>"><h4 class="whatson-title"><?php echo get_the_title(); ?></h4></a>

            <?php
        endwhile;
        ?>
    </div>

<?php
endif; }

谢谢大家。

4

3 回答 3

0

我花了几个小时寻找这个,我可以确认它有效。请参阅下面的代码。

如果您正在尝试在具有其他循环的页面上进行循环,其中包含一堆模板部分,并且您还想按类别排序,它会:

    $today = time();

    $the_query = new WP_Query( array(
    'post_type' => 'events',
    'posts_per_page' => 3,
    'meta_query' => array(
        array(
            'key' => 'start',
            'value' => $today,
            'compare' => '>=',
        )
    ),

    'tax_query' => array(
        array (
        'taxonomy' => 'the_taxonomy',
        'field' => 'slug',
        'terms' => 'the-name'
        )
    ),
    'meta_key' => 'start',
    'orderby' => 'meta_value',
    'order' => 'ASC',
    ) );
while ( $the_query->have_posts() ) :
    $the_query->the_post();
        get_template_part( 'content-events' );
endwhile;
wp_reset_postdata();

当然,你必须事先包含 Unix 函数。

function custom_unixtimesamp ( $post_id ) {
if ( get_post_type( $post_id ) == 'events' ) {
$startdate = get_post_meta($post_id, 'start', true);
    if($startdate) {
        $dateparts = explode('_', $startdate);
        $newdate1 = strtotime(date('d.m.Y H:i:s', strtotime($dateparts[1].'/'.$dateparts[0].'/'.$dateparts[2])));
        update_post_meta($post_id, 'unixstartdate', $newdate1  );
    }
}
 }
add_action( 'save_post', 'custom_unixtimesamp', 100, 2);
于 2014-08-21T15:32:57.380 回答
0

尝试

orderby=date or `post_date`

如果不是最简单的方法是将自定义字段“开始日期”保存为 unix 时间戳。为此,请将以下内容添加到主题的 functions.php

// CREATE UNIX TIME STAMP FROM DATE PICKER
function custom_unixtimesamp ( $post_id ) {
if ( get_post_type( $post_id ) == 'events' ) {
$startdate = get_post_meta($post_id, 'startdate', true);

    if($startdate) {
        $dateparts = explode('/', $startdate);
        $newdate1 = strtotime(date('d.m.Y H:i:s', strtotime($dateparts[1].'/'.$dateparts[0].'/'.$dateparts[2])));
        update_post_meta($post_id, 'unixstartdate', $newdate1  );
    }
}
 }
     add_action( 'save_post', 'custom_unixtimesamp', 100, 2);

该做的:

$today = time();

$args = array(
'post_type' => 'events',
'posts_per_page' => 5,

'meta_query' => array(
    array(
        'key' => 'unixstartdate',
        'compare' => '>=',
        'value' => $today,
    )
),

'meta_key' => 'startdate',
'orderby' => 'meta_value',
'order' => 'ASC',
);

$query = new WP_Query( $args );
$events = $query->posts;

从这里得到

于 2013-09-02T15:07:59.267 回答
0

我会这样处理它。创建一个“命名”元查询,然后按该查询排序。元查询使用“EXITS”过滤掉没有设置日期的帖子。当日期使用默认格式保存到数据库时,这适用于 ACF 日期选择器d/m/Y。这种方法也适用于日期时间选择器。

$query = new WP_Query([
    "meta_query" => [
        "custom_date" => [
            "key"     => "date",
            "compare" => "EXISTS",
            "type"    => "DATETIME",
        ]
    ],
    "orderby" => [
        "custom_date" => "ASC",
    ],
]);

确保将值更新为key您的 ACF 字段名称。

于 2020-11-06T14:33:46.613 回答