Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自定义WP\u站点地图\u提供程序站点地图页面改为加载最后一篇博客文章_Php_Wordpress_Wordpress Theming_Sitemap_Xml Sitemap - Fatal编程技术网

Php 自定义WP\u站点地图\u提供程序站点地图页面改为加载最后一篇博客文章

Php 自定义WP\u站点地图\u提供程序站点地图页面改为加载最后一篇博客文章,php,wordpress,wordpress-theming,sitemap,xml-sitemap,Php,Wordpress,Wordpress Theming,Sitemap,Xml Sitemap,我已经更新到Wordpress 5.5,希望从安装中删除Yoast,因为它几乎只用于站点地图,但是需要基于不同的帖子类型创建两个自定义站点地图,我目前正在使用Yoast 我正在添加一个自定义提供程序,如下所示,它覆盖了两个需要的抽象函数。这两种方法都有效,新条目将添加到位于wp-sitemap.xml的站点地图索引中 但是,当单击/wp-sitemap-range-1.xml时,我得到的是该站点上最新的博客文章,而不是预期的包含三种文章类型的站点地图 我在Wordpress API规范或code

我已经更新到Wordpress 5.5,希望从安装中删除Yoast,因为它几乎只用于站点地图,但是需要基于不同的帖子类型创建两个自定义站点地图,我目前正在使用Yoast

我正在添加一个自定义提供程序,如下所示,它覆盖了两个需要的抽象函数。这两种方法都有效,新条目将添加到位于wp-sitemap.xml的站点地图索引中

但是,当单击/wp-sitemap-range-1.xml时,我得到的是该站点上最新的博客文章,而不是预期的包含三种文章类型的站点地图

我在Wordpress API规范或codex中找不到任何文档,所以我现在有点不知所措-非常感谢您的帮助。与一个示例工作提供商的链接也将不胜感激,因为我已经搜索了很远,试图找到一些没有运气的东西

我接下来的步骤是检查主题中的所有404处理程序并重写处理程序,以查看是否有任何内容将其发送到错误的位置。我有更复杂的网站地图要制作,但我希望这三种帖子类型的简单聚合能够首先发挥作用

<?php
//Add provider for post types 'cast', 'keg', 'cider' to create a sitemap called 'range'
add_action('init', function() {
  $rangeProvider = new key_sitemapProvider('range', array('cask', 'keg', 'cider'));
  wp_register_sitemap_provider('pmrs-range', $rangeProvider);
});
​
/*---------------------*/
class key_sitemapProvider extends WP_Sitemaps_Provider {  
  public $postTypes = array();
​
  /*---------------------*/
  public function __construct($name, $postTypes) {
    $this->name        = $name;
    $this->postTypes   = $postTypes;    
    $this->object_type = 'post';
  }
​
  /*---------------------*/
  private function queryArgs(){
    return array(
      'post_type'      => $this->postTypes, 
      'post_status'    => 'publish',
      'posts_per_page' => -1,
      'orderby'        => 'post_date',
      'order'          => 'DESC'
    );
  }
​
  /*--OVERRIDE-----------*/
  public function get_url_list($page_num, $post_type = '') {
    $query = new WP_Query($this->queryArgs());
    $urlList = array();     
​
    foreach($query->posts as $post) {
      $sitemapEntry = array(
        'chf' => 'weekly',
        'pri' => 1.0,
        'loc' => get_permalink($post),
        'mod' => get_the_modified_time('Y-m-d H:i:s', $post)
      );
      
      $sitemapEntry = apply_filters('wp_sitemaps_posts_entry', $sitemapEntry, $post, $post_type);
      $urlList[] = $sitemapEntry;
    }
​
    return $urlList;
  }
​
  /*--OVERRIDE-----------*/
  public function get_max_num_pages($post_type = '') {    
    return 1;
  }
  
  /*---------------------*/
}
​

我也有同样的问题,而且文档根本不存在

通过几次尝试和错误,我发现WordPress很可能不喜欢名字中的任何特殊字符

在我的例子中,将
社区帖子
替换为
社区帖子
有帮助

以下是我们目前正在进行的非常粗略(但有效)的概念证明:

类PeepSo3\u站点地图\u提供程序扩展了WP\u站点地图\u提供程序{
私有$limit=10;/@TODO可配置
公共函数构造(){
$this->name='communityposts';
$this->object_type='communityposts';
}
专用函数sql($page\u num){
$sql=“”;//您在此处的查询;
返回$wpdb->get_results($sql);
}
//检索一页结果
公共函数get_url_list($page_num,$object_subtype=''){
$url_list=[];
$posts=$this->sql($page\u num);
foreach($posts作为$post){
$url\u list[]=['loc'=>$post->url;//取决于您的项目结构
}
返回$url\u列表;
}
//估计有多少页可用
公共函数get_max_num_pages($object_subtype=''){
$posts=$this->sql(-1);
返回ceil($posts[0]->count_posts/$this->limit);
}
}
//注册XML站点地图提供程序
添加过滤器('init',函数(){
$provider=new PeepSo3\u Sitemap\u provider();
wp_注册_站点地图_提供程序('communityposts',$provider);
});

干杯,马特,我会让助教尝试一下,让你知道它是否有效。我刚刚用一些示例代码更新了我的回复。我们的东西不使用WP_查询,但你应该可以很好地调整它。干杯,马特。我会在接下来的几天里看一看,如果你用这个代码工作,那么我很有信心我可以调整它使它工作g、 我会让你知道我的进展情况并接受你的回答:-)快速问题。我已经有几个现有的my-custom-sitemap1.xml、my-custom-sitemap2.xml等文件,我正在尝试确定如何/在上面的代码中,我只需将我的每个自定义sitemap条目放入主要的wp-sitemap.xml顶级sitemap?非常感谢救命啊!
/*---------------------*/
add_action('init', function() {
  $rangeProvider = new key_sitemapProvidor('range', array('cask', 'keg', 'cider'));
  wp_register_sitemap_provider('range', $rangeProvider);
});

/*---------------------*/
class key_sitemapProvidor extends WP_Sitemaps_Provider {  
  public $postTypes = array();

  /*---------------------*/
  public function __construct($name, $postTypes) {
    $this->name        = $name;
    $this->postTypes   = $postTypes;    
    $this->object_type = 'post';
  }

  /*---------------------*/
  private function queryArgs(){
    return array(
      'post_type'      => $this->postTypes, 
      'post_status'    => 'publish',
      'posts_per_page' => -1,
      'orderby'        => 'post_date',
      'order'          => 'DESC'
    );
  }

  /*--OVERRIDE-----------*/
  public function get_url_list($page_num, $post_type = '') {
    $query = new WP_Query($this->queryArgs());
    $urlList = array();     

    foreach($query->posts as $post) {
      $sitemapEntry = array(
        'changefreq' => 'weekly',
        'priority' => 1.0,
        'loc' => get_permalink($post),
        'lastmod' => get_the_modified_time('Y-m-d H:i:s', $post)
      );
      
      $sitemapEntry = apply_filters('wp_sitemaps_posts_entry', $sitemapEntry, $post, $post_type);
      $urlList[] = $sitemapEntry;
    }

    return $urlList;
  }

  /*--OVERRIDE-----------*/
  public function get_max_num_pages($post_type = '') {    
    return 1;
  }
  
  /*---------------------*/
}