创建不带插件的站点地图--仅获取父页面?

时间:2017-05-25 作者:Run

我想创建一个只包含父页面的网站地图。

这是我通常仅用于获取父页面的代码:

$args = array(
    \'post_type\' => \'page\',
    \'post_parent\' => 0,
    \'orderby\' => \'rand\',
    \'posts_per_page\' => 3,
    \'post_status\' => array(\'publish\'),
);
$parents = new WP_Query($args);
我使用了这个网站地图代码answer:

add_action( "save_post", "eg_create_sitemap" );   
function eg_create_sitemap() {
    $postsForSitemap = get_posts( array(
        \'numberposts\' => -1,
        \'orderby\'     => \'modified\',
        \'post_type\'   => array( \'post\', \'page\' ),
        \'order\'       => \'DESC\'
    ) );
    $sitemap = \'<?xml version="1.0" encoding="UTF-8"?>\';
    $sitemap .= "\\n" . \'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\' . "\\n";    
    foreach( $postsForSitemap as $post ) {
        setup_postdata( $post );   
        $postdate = explode( " ", $post->post_modified );   
        $sitemap .= "\\t" . \'<url>\' . "\\n" .
            "\\t\\t" . \'<loc>\' . get_permalink( $post->ID ) . \'</loc>\' .
            "\\n\\t\\t" . \'<lastmod>\' . $postdate[0] . \'</lastmod>\' .
            "\\n\\t\\t" . \'<changefreq>monthly</changefreq>\' .
            "\\n\\t" . \'</url>\' . "\\n";
    }     
    $sitemap .= \'</urlset>\';     
    $fp = fopen( ABSPATH . "sitemap.xml", \'w\' );
    fwrite( $fp, $sitemap );
    fclose( $fp );
}
它获取所有页面,所以它不是我想要的,并生成了一个网站地图。我的WP根目录中的xml(it was not there before this).

然后我修改了,但它不工作-它仍然返回所有页面。所以我把它从网站地图上删除了。xml在我的根目录中,但我得到一个404错误。

为什么?怎么会这样?

1 个回复
SO网友:Aishan

您必须稍微修改对上述代码的查询,如下所示:

 $postsForSitemap = get_posts( array(
        \'numberposts\' => -1,
        \'orderby\'     => \'rand\',
        \'post_type\'   => array( \'page\' ),
        \'post_parent\' => 0,
        \'order\'       => \'DESC\'

    ) );
如果您希望所有页面都没有父页面,就像您过去只获取父页面一样。它将生成一个站点地图。xml文件,并在创建/更新页面后使用最新的第一个(最后修改的)更新链接(URL)。

希望有帮助!!

结束