显示多个自定义帖子类型,并按其中一个字段的时间顺序进行排序

时间:2014-06-25 作者:rkoller

我有四个使用自定义帖子类型ui插件创建的自定义帖子类型;每个代表一个事件类型,其中包含一组使用高级自定义字段插件创建的不同自定义字段。

我的目标是按时间顺序显示四个事件池中的所有事件。用WP\\u query查询这四个是没有问题的,但到目前为止,区分输出并对其进行排序让我很担心。

示例代码查询自定义post类型,并输出事件的日期以及一个回音,以确定事件的类型,以便进行调试。

<article>
    <?php $args = array(
        \'post_type\' => array( \'eventtype1\', \'eventtype2\', \'eventtype3\', \'eventtype4\' ),
        \'posts_per_page\' => -1
    );
    $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
        if ( \'post_type\' == \'eventtype1\' ) {
          ?><p><?php the_field( \'eventtype1_date\' ); ?></p><?php
          echo "event type 1";
        }
        elseif ( \'post_type\' == \'eventtype2\') { 
          ?><p><?php the_field( \'eventtype2_date\' ); ?></p><?php 
          echo "event type 2";
        }
        elseif ( \'post_type\' == \'eventtype3\' ) {
          ?><p><?php the_field( \'eventtype3_date\' ); ?></p><?php
          echo "event type 3";
        }
        elseif ( \'post_type\' == \'eventtype4\' ) {
          ?><p><?php the_field( \'eventtype4_date\' ); ?></p><?php
          echo "event type 4";              
        } ?>
</article>
一个问题是,我不确定是否可以通过post\\U类型来区分WP\\U查询数组范围之外的内容。可能是示例代码还没有输出的原因。

其次,我不确定如何对结果进行排序。如果我使用\'orderby\' => \'date\'在WP\\u查询数组中,我按发布日期排序,而不是按实际事件日期排序。关于排序,我不确定在这种设置中是否可能?

任何提示都是非常受欢迎的。向拉尔夫致意

Update:好的,我已经解决了这个问题。使用以下代码,可以按日期对多个自定义帖子类型中的acf日期选择器字段和转发器字段中的acf日期选择器字段进行排序(查询的日期选择器必须首先放置在转发器字段中):

<article>
          <?php $args = array(
                \'post_type\' => array( \'event_type1\', \'event_type2\', \'event_type3\', \'event_type4\' ),
                \'posts_per_page\' => -1,
                \'meta_query\' => array(
                      \'relation\' => \'OR\',
                      array(\'key\' => \'event1_date_0_event1_date_day\'),
                      array(\'key\' => \'event2_date\'),
                      array(\'key\' => \'event3_date_0_event3_date_day\'),
                      array(\'key\' => \'event4_date\' )
                ),
                \'meta_key\' => \'meta_value\',
                \'orderby\' => \'meta_value\',
                \'order\' => \'ASC\'
         );
         $the_query = new WP_Query( $args );
         if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
            if ( get_post_type() == \'event_typ1\' ) {
                $e1 = get_field( \'event1_date\' );
                echo "Event Type 1"; ?>
                <p><?php echo $e1[0][\'event1_date_day\']; ?></p><?php
            }
            elseif ( get_post_type() == \'event_typ2\') {
                echo "Event Type 2:"; ?>
                <p><?php the_field( \'event2_date\' ); ?></p><?php
            }
            elseif ( get_post_type() == \'event_type3\' ) {
                $e3 = get_field( \'event3_date\' );
                echo "Event Type 3:"; ?>
                <p><?php echo $e3[0][\'event3_date_day\']; ?></p><?php
            }
            elseif ( get_post_type() == \'event_type4\' ) {
                echo "Event Type 4:";
                ?><p><?php the_field( \'event4_date\' ); ?></p><?php
            }
         endwhile;
             wp_reset_postdata();
         else: ?>
            <p>Error</p>
         <?php endif; ?>
</article>

1 个回复
SO网友:Alon Nadel

此示例代码没有输出,因为您使用的IF语句永远不会返回true,因为字符串“post\\u type”永远不会等于任何其他字符串,而是“post\\u type”。使用get\\u post\\u type():

if ( get_post_type() == \'eventtype1\' ) {
要按日期自定义字段排序,如果希望同时查询所有帖子类型,则需要对所有帖子类型使用相同的字段id。

$args = array(
    \'post_type\' => array( \'eventtype1\', \'eventtype2\', \'eventtype3\', \'eventtype4\' ),
    \'posts_per_page\' => -1,
    \'meta_key\'      => \'start_date\',
    \'orderby\'       => \'meta_value_num\',
    \'order\'         => \'DESC\'
);

http://www.advancedcustomfields.com/resources/how-to/orde-posts-by-custom-fields/

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post

显示多个自定义帖子类型,并按其中一个字段的时间顺序进行排序 - 小码农CODE - 行之有效找到问题解决它

显示多个自定义帖子类型,并按其中一个字段的时间顺序进行排序

时间:2014-06-25 作者:rkoller

我有四个使用自定义帖子类型ui插件创建的自定义帖子类型;每个代表一个事件类型,其中包含一组使用高级自定义字段插件创建的不同自定义字段。

我的目标是按时间顺序显示四个事件池中的所有事件。用WP\\u query查询这四个是没有问题的,但到目前为止,区分输出并对其进行排序让我很担心。

示例代码查询自定义post类型,并输出事件的日期以及一个回音,以确定事件的类型,以便进行调试。

<article>
    <?php $args = array(
        \'post_type\' => array( \'eventtype1\', \'eventtype2\', \'eventtype3\', \'eventtype4\' ),
        \'posts_per_page\' => -1
    );
    $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
        if ( \'post_type\' == \'eventtype1\' ) {
          ?><p><?php the_field( \'eventtype1_date\' ); ?></p><?php
          echo "event type 1";
        }
        elseif ( \'post_type\' == \'eventtype2\') { 
          ?><p><?php the_field( \'eventtype2_date\' ); ?></p><?php 
          echo "event type 2";
        }
        elseif ( \'post_type\' == \'eventtype3\' ) {
          ?><p><?php the_field( \'eventtype3_date\' ); ?></p><?php
          echo "event type 3";
        }
        elseif ( \'post_type\' == \'eventtype4\' ) {
          ?><p><?php the_field( \'eventtype4_date\' ); ?></p><?php
          echo "event type 4";              
        } ?>
</article>
一个问题是,我不确定是否可以通过post\\U类型来区分WP\\U查询数组范围之外的内容。可能是示例代码还没有输出的原因。

其次,我不确定如何对结果进行排序。如果我使用\'orderby\' => \'date\'在WP\\u查询数组中,我按发布日期排序,而不是按实际事件日期排序。关于排序,我不确定在这种设置中是否可能?

任何提示都是非常受欢迎的。向拉尔夫致意

Update:好的,我已经解决了这个问题。使用以下代码,可以按日期对多个自定义帖子类型中的acf日期选择器字段和转发器字段中的acf日期选择器字段进行排序(查询的日期选择器必须首先放置在转发器字段中):

<article>
          <?php $args = array(
                \'post_type\' => array( \'event_type1\', \'event_type2\', \'event_type3\', \'event_type4\' ),
                \'posts_per_page\' => -1,
                \'meta_query\' => array(
                      \'relation\' => \'OR\',
                      array(\'key\' => \'event1_date_0_event1_date_day\'),
                      array(\'key\' => \'event2_date\'),
                      array(\'key\' => \'event3_date_0_event3_date_day\'),
                      array(\'key\' => \'event4_date\' )
                ),
                \'meta_key\' => \'meta_value\',
                \'orderby\' => \'meta_value\',
                \'order\' => \'ASC\'
         );
         $the_query = new WP_Query( $args );
         if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
            if ( get_post_type() == \'event_typ1\' ) {
                $e1 = get_field( \'event1_date\' );
                echo "Event Type 1"; ?>
                <p><?php echo $e1[0][\'event1_date_day\']; ?></p><?php
            }
            elseif ( get_post_type() == \'event_typ2\') {
                echo "Event Type 2:"; ?>
                <p><?php the_field( \'event2_date\' ); ?></p><?php
            }
            elseif ( get_post_type() == \'event_type3\' ) {
                $e3 = get_field( \'event3_date\' );
                echo "Event Type 3:"; ?>
                <p><?php echo $e3[0][\'event3_date_day\']; ?></p><?php
            }
            elseif ( get_post_type() == \'event_type4\' ) {
                echo "Event Type 4:";
                ?><p><?php the_field( \'event4_date\' ); ?></p><?php
            }
         endwhile;
             wp_reset_postdata();
         else: ?>
            <p>Error</p>
         <?php endif; ?>
</article>

1 个回复
SO网友:Alon Nadel

此示例代码没有输出,因为您使用的IF语句永远不会返回true,因为字符串“post\\u type”永远不会等于任何其他字符串,而是“post\\u type”。使用get\\u post\\u type():

if ( get_post_type() == \'eventtype1\' ) {
要按日期自定义字段排序,如果希望同时查询所有帖子类型,则需要对所有帖子类型使用相同的字段id。

$args = array(
    \'post_type\' => array( \'eventtype1\', \'eventtype2\', \'eventtype3\', \'eventtype4\' ),
    \'posts_per_page\' => -1,
    \'meta_key\'      => \'start_date\',
    \'orderby\'       => \'meta_value_num\',
    \'order\'         => \'DESC\'
);

http://www.advancedcustomfields.com/resources/how-to/orde-posts-by-custom-fields/

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post