WordPress:get_permalink在插件中不起作用

时间:2019-02-06 14:10:00

标签: wordpress

我正在尝试构建站点地图插件,但被困在一个简单的WordPress循环中。每次我尝试获取URL时,网站崩溃。 get_permalink造成了循环并使站点崩溃。我已经测试了这些,但没有一个适合我:

  • get_permalink
  • the_permalink
  • get_post_permalink
  • get_the_permalink

循环:

function fa_sitemap_build() {

  // Create/open the file
  $file = fopen( get_template_directory() . '/sitemap.xml','wb');

  $the_query = get_posts('post_type = page');
  foreach ( $the_query as $post ) {

        $title = get_the_title($post->ID);
        $link = get_permalink($post->ID);
        $date = $post->post_modified;

        $url .= '
            <url>
                <title>'.$title.'</title>
                <url>'.$link.'</url>
                <lastmod>'.$date.'</lastmod>
            </url>
        ';

  }
  wp_reset_postdata();


  $sitemap = '
  <?xml version="1.0" encoding="UTF-8"?>
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    '.$url.'
  </urlset>';

  // write content to the file
  fwrite( $file, $sitemap );
  fclose( $file ); // Close the file

}

1 个答案:

答案 0 :(得分:0)

传递给get_posts()的参数必须是一个数组。尝试以下代码。

<?php

    $args = array(
        'post_type' => 'page',
    );

    $posts = get_posts( $args );

    foreach ( $posts as $post ) {
        echo $post->title;
        echo '<br />';
        echo $post->post_content;
        echo '<br />';
        echo get_permalink( $post->ID );
    }

或者您也可以使用以下代码,它的工作原理相同。

$args = array(
    'post_type' => 'page',
);

$posts = get_posts( $args );

foreach ( $posts as $post ) {
    setup_postdata( $post );
    the_title();
    echo '<br />';
    the_content();
    echo '<br />';
    the_permalink();
}
wp_reset_postdata();

参考: