[英]Looping through all posts shows duplicates in Wordpress
我和与我一起工作的SEO家伙想要生成我们自己的站点地图(出于某些原因)。 为此,显然我需要遍历wordpress安装中的所有帖子和页面。 我编写了一个快速功能,并将其上载到实时站点的服务器上,以查看它是否有效。
但是,奇怪的是,当我尝试在本地安装的wordpress(使用WAMP)上测试该功能时,它多次打印出一些帖子名称(也称为重复项)。 我只是想知道这里的人是否知道可能正在发生的错误,或者我的代码是否需要更改。 例如,我的代码现在可以在实时站点上工作了,但是当以后添加更多帖子并且我开始在XML文件中看到重复项时,我宁愿不面对这个问题。
无论如何,这是我的代码:
<?php
$posts = new WP_Query('post_type=any&posts_per_page=-1&post_status=publish');
$posts = $posts->posts;
// Loop through each post, and echo out the url and it's amp extension.
foreach($posts as $post) {
if($post->post_type == 'post') {
$permalink = get_permalink($post->ID);
echo "\n\t<url>\n\t\t<loc>{$permalink}</loc>\n\t</url>";
echo "\n\t<url>\n\t\t<loc>{$permalink}amp/</loc>\n\t</url>";
}
}
正如我所提到的,它可以在实时站点上运行,并且不会打印重复项。 因此,您不必担心echo语句的语法,这是网站上每篇文章的打印内容:
<url>
<loc>https://www.somedomain.com/post1/</loc>
</url>
<url>
<loc>https://www.somedomain.com/post1/amp/</loc>
</url>
有人对此有意见吗?
找出一种使用WP查询来获取我需要检索的数据的解决方案,然后我仅使用常规的PHP来处理其余的数据。 可能是不必要的,但我不想浪费更多的时间在无用的Wordpress文档中漫游。
我在函数的开头实例化一个空数组,然后遍历所有帖子,提取其ID,然后将其推入我创建的数组中。
while循环结束后,我将遍历数组,并打印出每个帖子所需的xml。 非常简单,并且不会创建重复项。
$xml = "";
$posts = array();
$q = new WP_Query(array(
'post_type' => 'any',
'post_status' => 'publish',
'posts_per_page' => 50000,
'has_password' => false,
));
// Loop through all posts, and push each id to the new posts array
if ($q->have_posts()) {
while ($q->have_posts()) {
$q->the_post();
if(get_post_type() == 'post') {
$id = get_the_ID();
array_push($posts, $id);
}
}
}
// Loop through posts array and append the posts info into xml format
foreach($posts as $post) {
$xml .= "<url>\n";
$xml .= "\t<loc>\t\n";
$xml .= "\t\t" . esc_url(get_permalink($post));
$xml .= "\n\t</loc>\t";
$xml .= "\n</url>\n\n";
}
我在这里省略了amp部分,但是,在我的代码中,我也为每个帖子都打印了一个amp扩展名。 最终结果像这样打印出来。
<url>
<loc>
http://www.domainname.com/blog/article1
</loc>
</url>
<url>
<loc>
http://www.domainname.com/blog/article2
</loc>
</url>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.