【问题标题】:wordpress advanced custom fields order posts by date-pickerwordpress 高级自定义字段按日期选择器排序帖子
【发布时间】:2013-09-02 14:58:02
【问题描述】:

对于那些熟悉 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; }

谢谢大家。

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    试试

    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;
    

    Got it from here

    【讨论】:

      【解决方案2】:

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

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

          $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);
      

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2016-06-10
          • 1970-01-01
          • 2013-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-25
          • 2016-01-11
          • 1970-01-01
          相关资源
          最近更新 更多