我和与我一起工作的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>

有人对此有意见吗?

===============>>#1 票数:0

找出一种使用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>

  ask by Dan Zuzevich translate from so

未解决问题?本站智能推荐: