Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建自己的Wordpress循环的最佳方法是什么?_Php_Wordpress_Loops - Fatal编程技术网

Php 创建自己的Wordpress循环的最佳方法是什么?

Php 创建自己的Wordpress循环的最佳方法是什么?,php,wordpress,loops,Php,Wordpress,Loops,使用Wordpress的内置功能从Wordpress输出内容似乎有三种主要方式,推荐使用WP\u Query: 它们之间有什么区别?(我知道WP\u Query是类,另外两个是方法) 在同一页上有多个循环,而不相互干扰的最干净的方法是什么 我正在寻找如何编程WP循环的示例; e、 g.按类别输出2个单独的帖子列表,包括附件、元数据等 这是迄今为止我找到的最好的参考资料: 来自获取帖子的WP文档: get_posts()还可以采用query_posts()可以采用的参数,因为这两个函

使用Wordpress的内置功能从Wordpress输出内容似乎有三种主要方式,推荐使用
WP\u Query

它们之间有什么区别?(我知道
WP\u Query
是类,另外两个是方法)

在同一页上有多个循环,而不相互干扰的最干净的方法是什么

我正在寻找如何编程WP循环的示例; e、 g.按类别输出2个单独的帖子列表,包括附件、元数据等

这是迄今为止我找到的最好的参考资料:


来自获取帖子的WP文档:

get_posts()还可以采用query_posts()可以采用的参数,因为这两个函数现在在内部使用相同的数据库查询代码

这两个函数之间的唯一区别是get_posts返回一个包含post记录的数组,而query_posts将记录存储在查询对象中,以供模板函数(has_posts、The_post等)检索

它们都使用WP_查询对象来执行查询


创建第二个循环将在中介绍。这里有一些链接可用于多个循环的其他示例。你会注意到每个人的做法都不一样,但他们似乎都对自己的结果感到满意

我使用了WP\u查询和get\u帖子。在我的一个侧边栏模板上,我使用下面的循环来显示来自特定类别的帖子,方法是使用自定义字段,其键为“category_to_load”,其中包含类别slug或类别名称。真正的区别在于两种方法的实现

在我的一些模板中,get_posts方法看起来是这样的:

<?php    
    global $post;
    $blog_posts = get_posts( $q_string );
    foreach( $blog_posts as $post ) : 
    setup_postdata( $post );
?>
    <div class="blog_post">
        <div class="title">
            <h2>
                <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            </h2>
            <span class="date"><?php the_time( 'F j, Y' ); ?> by <?php the_author(); ?></span>
        </div>
        <?php the_excerpt(); ?>
    </div>
    <?php endforeach; 
?> 
主要区别在于,使用WP_查询时,不必重置全局$post变量,也不必通过调用每个post对象上的setup_postdata($post)来设置post数据。您还可以在WP_查询函数上使用have_posts()函数,该函数在使用get_posts()时不可用

除非您真的想使用query_posts()函数,否则不应该使用它,因为它会修改页面的主循环。看。因此,如果您正在构建一个特殊页面来显示您的博客,那么调用query\u posts可能会打乱页面的循环,因此您应该使用WP\u query

那只是我的两分钱。我的最终建议是,你的第一选择应该是WP_Query


-Chris

WP使用名为
$WP\u query
的对象作为主循环。我们通常看不到这个对象,因为它隐藏在只为
$wp\u query->have\u posts()
$wp\u query->the\u post()

如果要修改主循环,应在循环之前使用
query\u posts()

如果需要另一个循环,可以在新循环之前使用
query\u posts()
重新利用
$wp\u query
对象。如果需要,可以多次执行此操作

如果出于某种原因需要保留$wp_query对象,则应使用
wp_query
。当然,因为
have_posts()
the_post()
$wp\u query
对象的包装,所以不能将它们与
wp\u query
一起使用。您应该使用
$your\u query\u obj->have\u posts()

$sidebar= WP_Query('category_name= sidebar');

while( $sidebar->have_posts() ): $sidebar->the_post();
  the_title();
  the_content();
endwhile;
WP\u Query
可能优于
Query\u posts()
的一个好例子是左侧边栏。 由于侧边栏的代码循环可能会放在主循环的顶部,因此
query\u posts()
调用将更改
$wp\u query
对象,并更改主循环。在这种情况下,要在边栏代码处使用
query\u posts()
,您还需要在主循环之前使用
query\u posts()
,以查询该循环的正确内容

因此,在本例中使用WP_Query将保持$WP_Query,因此主循环保持不变

但是,对于一个常见的场景,
query\u posts()

query_posts('category_name=blog');

while( have_posts() ): the_post();
  the_title();
  the_content();
endwhile;

您将如何访问post子项(附件、修订版等)。这是一个单独的查询吗?您可以使用get\u children()函数:。或者您可以使用wp_list_pages-wp_list_pages('title_li=&child_of='.$post->ID.&show_date=modified&date_format=$date_format');?>:如果你想要一份清单-C
query_posts('category_name=blog');

while( have_posts() ): the_post();
  the_title();
  the_content();
endwhile;