为我提供内容的WordPress循环

时间:2020-03-16 作者:Peter Friedlander

我有这个代码,它应该只给我页面的标题。取而代之的是,在给出我想要的内容后,返回第一页的所有帖子内容,而不仅仅是页面标题。

function gridpost($atts) { 
query_posts(array(\'showposts\' => 44, \'post_parent\' => 256, \'post_type\' => \'page\'));

while (have_posts()): the_post();
$content .=get_the_title();               
 endwhile;

return $content;
wp_reset_query();  // Restore global post data

}//end of functioon 

add_shortcode(\'peter_pgrid\', \'gridpost\');

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

这里有三个主要问题

1。这个$content 变量

此变量首先出现在此处:

$content .=get_the_title(); 
但它似乎是凭空而来的!计算机需要被明确地告知该做什么,你知道我的意思。在你使用它们之前,你必须告诉它,否则它不会知道你的意思。

在这种情况下,PHP将在错误日志中生成一个警告/通知,然后将其替换为"" 或空值。这是PHP试图提供帮助,但它会很快填充您的PHP错误日志,并可能导致意外的问题和奇怪之处。

2。query_posts

从你的记忆中清除这个功能,用一千个太阳的火焰烧掉它的所有痕迹。该函数在日常使用中没有很好或有效的用途,这是一种破坏分页、降低页面速度并引发问题的好方法。

而是:

如果要更改页面上的帖子WP显示,请使用pre_get_posts 过滤器WP_Query 和一个标准回路。e、 g.:

$q = new WP_Query( [
    \'post_type\'      => \'page\',
    \'posts_per_page\' => 5,
]);

if ( $q->have_posts() ) {
    while( $q->have_posts() ) {
        $q->the_post();
        // display this post
    }
    wp_reset_postdata(); // cleanup after ourselves
} else {
    // nothing was found
}
上述查询将获取5页

3。返回语句和顺序

return 表示结束函数并传回此值。代码有一个非常重要的调用wp_reset_query, 但由于某种原因,它被放置在return 语句,从而无法访问PHP。

因此,在进行清理之前,短代码就会退出。但是现在,主循环中只有一个帖子,现在有了所有帖子query_posts 改为拖动,因此它不会停止并继续到注释区域或页脚,而是返回并循环。

记住,秩序很重要。代码从上到下运行。代码所做的与这些购物说明等效:

买鸡蛋买牛奶不要再看这些说明书了,回家买面包吧,这就足够了。

杂项注释缩进缩进!一个好的代码编辑器会为您自动缩进,不要让代码不缩进,如果您缩进代码,不要在代码中硬编码post id和category id,那么就不可能有一整组bug和错误。因为您使用的是短代码,所以请将它们作为属性传入-1 这对性能非常不利

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。