第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

自定義 WP_Sitemaps_Provider 站點地圖頁面加載最后一篇博客文章

自定義 WP_Sitemaps_Provider 站點地圖頁面加載最后一篇博客文章

PHP
一只萌萌小番薯 2023-10-01 10:06:12
我已經(jīng)更新到 Wordpress 5.5,并希望從安裝中刪除 Yoast,因為它幾乎只用于站點地圖,但是需要根據(jù)不同的帖子類型創(chuàng)建幾個自定義站點地圖,我目前正在使用 Yoast 進行此操作。我添加了一個自定義提供程序,如下所示,它覆蓋了兩個所需的抽象函數(shù)。這兩個都正常工作,并且新條目正在添加到位于 wp-sitemap.xml 的站點地圖索引中但是,當單擊 /wp-sitemap-range-1.xml 時,我得到了網(wǎng)站上最新博客文章的解決方案,而不是包含三種帖子類型的預期網(wǎng)站地圖。我在 Wordpress API 規(guī)范或法典中找不到任何文檔,所以目前有點不知所措 - 感謝任何幫助。與示例工作提供商的鏈接也將不勝感激,因為我已經(jīng)進行了很長時間的搜索,試圖找到一些沒有運氣的東西。我的下一步是檢查所有 404 處理程序并重寫主題中的處理程序,看看是否有任何內(nèi)容將其發(fā)送到錯誤的位置。我要生成更復雜的站點地圖,但希望這三種帖子類型的簡單聚合首先起作用。<?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;  }解決方案感謝馬特·賈沃斯基(Matt Jaworski)在下面的回答,找到了一種讓它發(fā)揮作用的方法,但還有其他一些問題。WP_Sitemaps_Provider 擴展的名稱屬性需要與您在 Wordpress 中注冊的名稱相匹配。另外,這不應該包含任何特殊字符站點地圖條目中支持的值有:changefreq、priority、loc 和 lastmod。這與我之前的縮短版本相反。
查看完整描述

1 回答

?
繁花如伊

TA貢獻2012條經(jīng)驗 獲得超12個贊

我遇到了同樣的問題,并且文檔根本不存在。


通過幾次試驗和錯誤,我發(fā)現(xiàn) WordPress 很可能不喜歡名稱中的任何特殊字符。


就我而言,替換community-posts為communitypostshelp。


這是我們現(xiàn)在正在研究的非常粗略(但有效)的概念證明:


class PeepSo3_Sitemap_Provider extends WP_Sitemaps_Provider {

        

    private $limit = 10; // @TODO CONFIGURABLE


    public function __construct() {

        $this->name        = 'communityposts';

        $this->object_type = 'communityposts';

    }


    private function sql($page_num) {


        $sql =""; // your queries here;


        return $wpdb->get_results($sql);

    }


    // retrieve a page of results

    public function get_url_list( $page_num, $object_subtype = '' ) {


        $url_list = [];



        $posts = $this->sql($page_num);


        foreach($posts as $post)  {

            $url_list[] = ['loc' => $post->url; // depends on your item structure

        }


        return $url_list;

    }


    // estimate how many pages are available

    public function get_max_num_pages( $object_subtype = '' ) {

        $posts = $this->sql(-1);

        return ceil($posts[0]->count_posts/$this->limit);

    }

}


// Register XML Sitemap Provider

add_filter('init', function() {

    $provider = new PeepSo3_Sitemap_Provider();

    wp_register_sitemap_provider( 'communityposts', $provider );

});


查看完整回答
反對 回復 2023-10-01
  • 1 回答
  • 0 關注
  • 163 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號