在循环中间获取自定义字段

时间:2014-09-18 作者:Nsokyi

有没有办法

<?php the_field("do_stuff")?>
要进入这样的多重循环中间:

            <?php query_posts(\'cat=4&posts_per_page=5\'); ?>

            <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

                <h1><?php the_title() ;?></h1>      
                <?php the_post_thumbnail(); ?>
                <?php the_excerpt(); ?>

            <?php endwhile; else: ?>

                <p>Sorry, there are no posts to display</p>

            <?php endif; ?>

            <hr>

            <?php rewind_posts(); ?>

            <?php query_posts(\'cat=5&posts_per_page=5\'); ?>

            <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

                <h2><?php the_title() ;?></h2>      

                <?php the_excerpt(); ?>

            <?php endwhile; else: ?>

                <p>Sorry, there are no posts to display</p>

            <?php endif; ?>
我试着把它放在rewind\\U帖子的上方和下方,但它没有出现?字段代码是“高级自定义字段”插件的一部分,我希望用户能够在两个帖子部分之间发布他们想要的内容。

谢谢

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

您不应该使用query_posts 总之,这只是个问题,而且很容易失败

Note: 此功能不适用于插件或主题。如后文所述,有更好、性能更好的选项来更改主查询。query\\u posts()是一种过于简单且有问题的方法,通过将页面的主查询替换为新的查询实例来修改它。它效率低下(重新运行SQL查询),并且在某些情况下会彻底失败(尤其是在处理POST分页时)

我甚至不认为您需要在这里运行自定义查询,更不用说两个了。我认为您在这里要做的是将实际查询一分为二,以便在post 1和post 2之间添加自定义字段

我将返回到主查询并按原样使用它。内置循环计数器$wp_query->current_post 在模板中的任何位置都可用,因此您可以使用它来统计您的帖子

这是未经测试的,但您很可能可以这样做。只需将此添加到循环之后*请记住,循环计数器从零开始,而不是从一开始

if( 0 == $wp_query->current_post ) {
    // Add whatever you need to add to appear after post one
}
如果你需要分页,并且在每页的第一篇文章之后需要这样做,我想这样的方法会管用的

if( 0 == $wp_query->current_post || 0 == $wp_query->current_post%JUST_ADD_YOUR_POSTS_PER_PAGE_VALUE_HERE  ) {
    // Add whatever you need to add to appear after post one
}

EDIT

动态发生了巨大的变化,所以我的第一种方法行不通。您需要运行两个自定义循环,因为这两个循环完全不同。我建议使用WP_Query 代替query_posts. 你甚至可以使用get_posts 作为另一种选择。

这里有一个非常重要的注意事项,无论何时运行自定义查询,都必须重置它们,否则它们将影响后面的任何其他查询,我认为这可能是您首先遇到的问题。

试试这样的

       <?php $query_one = new WP_Query(\'cat=4&posts_per_page=5\'); ?>

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

            <h1><?php the_title() ;?></h1>      
            <?php the_post_thumbnail(); ?>
            <?php the_excerpt(); ?>

        <?php endwhile; else: ?>

            <p>Sorry, there are no posts to display</p>

        <?php endif; ?>
        <?php wp_reset_postdata(); // VERY VERY IMPORTANT?>

        <hr>
        <?php // PLACE YOUR FIELD HERE ?>


        <?php $query_two = new WP_Query(\'cat=5&posts_per_page=5\'); ?>

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

            <h2><?php the_title() ;?></h2>      

            <?php the_excerpt(); ?>

        <?php endwhile; else: ?>

            <p>Sorry, there are no posts to display</p>

        <?php endif; ?>
        <?php wp_reset_postdata(); // VERY VERY IMPORTANT?>

SO网友:Milo

如果试图获取与正在执行这些额外查询的页面关联的字段,则必须首先重置全局$post 在任何自定义查询之后,或者您将尝试从运行的上一个循环中最后一个帖子中获取字段。

wp_reset_postdata();
the_field("do_stuff");
如果不将第二个参数传递给the_field 它将使用全球$post->ID. 您还可以传递要从中获取字段的显式post ID:

$the_id_of_my_page = 42;
the_field( "do_stuff", $the_id_of_my_page );

结束

相关推荐

Wordpress loop is not working

有人能告诉我为什么wordpress的博客会反复循环标题和横幅吗?似乎不仅仅是循环帖子,而是循环整个页面。此代码在我的内容中。php文件。任何帮助都将不胜感激。以下是我的博客链接:http://testing.printlabelandmail.com/blog/<?php /** * The default template for displaying content. */ get_header(); ?> <!-- Start T