使用ACF帖子对象显示带有WP_QUERY的特定帖子

时间:2018-08-30 作者:Stefan

这件事我需要帮助。我想做的是显示自定义帖子类型的特定帖子。一切正常,只是我不能显示超过1(一)个帖子。不管我选了多少帖子,它总会给我一个回复。这是完整的代码

<?php

$post_objects = get_sub_field(\'choose_blocks\');
$string = "";
if( $post_objects ): ?>

    <?php foreach( $post_objects as $post_object):

        $post_id = $post_object->ID;

        $string .= $post_id.\',\';


    endforeach; ?>

    <?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly ?>
<?php endif; ?>

<?php $string =  rtrim($string, \',\'); ?>

 <?php
     $args = array(
        \'post_type\'=>\'presentations\',
        \'post_status\'=>\'publish\',
        \'post__in\' => array( $string )
    );
?>
 <?php // the query
    $all_presentations = new WP_Query($args); ?>

    <?php if ( $all_presentations->have_posts() ) : ?>

        <?php while ( $all_presentations->have_posts() ) : $all_presentations->the_post(); ?>

            <?php get_template_part( \'includes/content\', get_post_format() ); ?>

        <?php endwhile; ?>
        <!-- end of the loop -->


        <?php wp_reset_postdata(); ?>

    <?php else : ?>
       <!-- do nothing -->
    <?php endif; ?>

<?php endif; ?>

2 个回复
SO网友:honk31

现在我们就要到了。。你真的需要试着解释,你的问题是什么,你的问题不是很清楚。

我的假设是,你试过这个,但没有成功:

foreach( $post_objects as $post_object):
  get_template_part( \'includes/content\', get_post_format( $post_object->ID ) );
endforeach;
原因如下:你调用模板,但全局$post 仍设置为上一篇文章/页面。您需要设置全局$post 变量,稍后在代码中执行($all_presentations->the_post();). 当你在foreach而不是WP_Query(), 但您可以设置全局$post 当您将该帖子的对象setup_postdata. 当您这样做时,您可以调用所有其他函数,如the_title()the_content() wp将从您提供的对象中获取它。

以下是方法:

<?php
 /**
   * when you call the_title() here, it will return the title of the current post/page (global $post defined by main query)
   */
if( $post_objects ):
  foreach( $post_objects as $post): //!!the variable MUST be called $post
    setup_postdata($post); //set new $post_object
    /**
      * now we switched global $post, so the_title() will return other the contents of your $post_object
      */
    get_template_part( \'includes/content\', get_post_format() );
  endforeach;
  wp_reset_postdata(); //reset global $post
endif;
?>
你需要打电话setup_postdata()在你的身体上,使用get_post_format(). 请参见docs 有关setup\\u postdata的详细信息。

SO网友:Stefan

这是一个解决方案,我需要返回一个字符串数组。在数组()中传递字符串是不够的

<?php $arr = explode(\',\', $string); ?>
完整代码

<?php

$post_objects = get_sub_field(\'choose_blocks\');
$string = "";
if( $post_objects ): ?>

    <?php foreach( $post_objects as $post_object):

        $post_id = $post_object->ID;

        $string .= $post_id.\',\';


    endforeach; ?>

    <?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly ?>
<?php endif; ?>

<?php $string =  rtrim($string, \',\'); ?>


// THIS IS THAT I NEED TO GET IT WORK
<?php $arr = explode(\',\', $string); ?>


 <?php
     $args = array(
        \'post_type\'=>\'presentations\',
        \'post_status\'=>\'publish\',
        \'post__in\' => array( $string )
    );
?>
 <?php // the query
    $all_presentations = new WP_Query($args); ?>

    <?php if ( $all_presentations->have_posts() ) : ?>

        <?php while ( $all_presentations->have_posts() ) : $all_presentations->the_post(); ?>

            <?php get_template_part( \'includes/content\', get_post_format() ); ?>

        <?php endwhile; ?>
        <!-- end of the loop -->


        <?php wp_reset_postdata(); ?>

    <?php else : ?>
       <!-- do nothing -->
    <?php endif; ?>

<?php endif; ?>

结束

相关推荐

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

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

使用ACF帖子对象显示带有WP_QUERY的特定帖子 - 小码农CODE - 行之有效找到问题解决它

使用ACF帖子对象显示带有WP_QUERY的特定帖子

时间:2018-08-30 作者:Stefan

这件事我需要帮助。我想做的是显示自定义帖子类型的特定帖子。一切正常,只是我不能显示超过1(一)个帖子。不管我选了多少帖子,它总会给我一个回复。这是完整的代码

<?php

$post_objects = get_sub_field(\'choose_blocks\');
$string = "";
if( $post_objects ): ?>

    <?php foreach( $post_objects as $post_object):

        $post_id = $post_object->ID;

        $string .= $post_id.\',\';


    endforeach; ?>

    <?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly ?>
<?php endif; ?>

<?php $string =  rtrim($string, \',\'); ?>

 <?php
     $args = array(
        \'post_type\'=>\'presentations\',
        \'post_status\'=>\'publish\',
        \'post__in\' => array( $string )
    );
?>
 <?php // the query
    $all_presentations = new WP_Query($args); ?>

    <?php if ( $all_presentations->have_posts() ) : ?>

        <?php while ( $all_presentations->have_posts() ) : $all_presentations->the_post(); ?>

            <?php get_template_part( \'includes/content\', get_post_format() ); ?>

        <?php endwhile; ?>
        <!-- end of the loop -->


        <?php wp_reset_postdata(); ?>

    <?php else : ?>
       <!-- do nothing -->
    <?php endif; ?>

<?php endif; ?>

2 个回复
SO网友:honk31

现在我们就要到了。。你真的需要试着解释,你的问题是什么,你的问题不是很清楚。

我的假设是,你试过这个,但没有成功:

foreach( $post_objects as $post_object):
  get_template_part( \'includes/content\', get_post_format( $post_object->ID ) );
endforeach;
原因如下:你调用模板,但全局$post 仍设置为上一篇文章/页面。您需要设置全局$post 变量,稍后在代码中执行($all_presentations->the_post();). 当你在foreach而不是WP_Query(), 但您可以设置全局$post 当您将该帖子的对象setup_postdata. 当您这样做时,您可以调用所有其他函数,如the_title()the_content() wp将从您提供的对象中获取它。

以下是方法:

<?php
 /**
   * when you call the_title() here, it will return the title of the current post/page (global $post defined by main query)
   */
if( $post_objects ):
  foreach( $post_objects as $post): //!!the variable MUST be called $post
    setup_postdata($post); //set new $post_object
    /**
      * now we switched global $post, so the_title() will return other the contents of your $post_object
      */
    get_template_part( \'includes/content\', get_post_format() );
  endforeach;
  wp_reset_postdata(); //reset global $post
endif;
?>
你需要打电话setup_postdata()在你的身体上,使用get_post_format(). 请参见docs 有关setup\\u postdata的详细信息。

SO网友:Stefan

这是一个解决方案,我需要返回一个字符串数组。在数组()中传递字符串是不够的

<?php $arr = explode(\',\', $string); ?>
完整代码

<?php

$post_objects = get_sub_field(\'choose_blocks\');
$string = "";
if( $post_objects ): ?>

    <?php foreach( $post_objects as $post_object):

        $post_id = $post_object->ID;

        $string .= $post_id.\',\';


    endforeach; ?>

    <?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly ?>
<?php endif; ?>

<?php $string =  rtrim($string, \',\'); ?>


// THIS IS THAT I NEED TO GET IT WORK
<?php $arr = explode(\',\', $string); ?>


 <?php
     $args = array(
        \'post_type\'=>\'presentations\',
        \'post_status\'=>\'publish\',
        \'post__in\' => array( $string )
    );
?>
 <?php // the query
    $all_presentations = new WP_Query($args); ?>

    <?php if ( $all_presentations->have_posts() ) : ?>

        <?php while ( $all_presentations->have_posts() ) : $all_presentations->the_post(); ?>

            <?php get_template_part( \'includes/content\', get_post_format() ); ?>

        <?php endwhile; ?>
        <!-- end of the loop -->


        <?php wp_reset_postdata(); ?>

    <?php else : ?>
       <!-- do nothing -->
    <?php endif; ?>

<?php endif; ?>

相关推荐

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

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