首頁>Web>source

我有一个稱為 pronews的自定義帖子型別 .我在 show_in_rest註册了 已啟用.我正在使用wordPress 5.5。

然後我得到以下代碼:

export const ProPost  = wp.api.models.Post.extend( {
    urlRoot: wpApiSettings.root + 'wp/v2/pronews',
    defaults: {
        type: 'pronews',
    },
} );
export const ProPosts = wp.api.collections.Posts.extend( {
    url: wpApiSettings.root + 'wp/v2/pronews',
    model: ProPost,
} );
const post = new ProPost( {id: 2454} );
console.log( post );
console.log( 'post urlRoot:' + post.urlRoot );
console.log( 'post url:' + post.url );
post.fetch().then( ( response ) => {
    console.log( response )
}, ( why ) => {
    console.log( why.responseJSON.code )
} );
// Double check that the endpoint is functionnal
fetch( wpApiSettings.root + 'wp/v2/pronews/2454' )
    .then( blob => blob.json() )
    .then( ( response ) => {
        console.log( response.id );
    } );

在控製台中,我首先得到:

{…}
​_changing: false
​_pending: false
​_previousAttributes: Object { type: "pronews", id: 2454 }
​attributes: Object { type: "pronews", id: 2454 }
​changed: Object {  }
​cid: "c3"
​id: 2454
​<prototype>: Object { urlRoot: "https://localhost/wp-json/wp/v2/pronews", defaults: {…}, constructor: i()
 }
ProNews.js:17:9
post urlRoot:https://localhost/wp-json/wp/v2/pronews ProNews.js:18:9
post url:function(){var e=a.get("apiRoot")+a.get("versionString")+("me"===i?"users/me":i);return _.isUndefined(this.get("id"))||(e+="/"+this.get("id")),e} ProNews.js:19:9

但是Backbone API的請求是针對錯誤的 urlRoot完成的 :

XHRGET https://localhost/wp-json/wp/v2/posts/2454 [HTTP/1.1 404 Not Found 340ms]
rest_post_invalid_id

對於除錯,使用 window.fetch的第二个HTTP請求的結果 ,表明"自定義帖子型別"的端點存在並且可以正常工作:

XHRGET https://localhost/wp-json/wp/v2/pronews/2454 [HTTP/1.1 200 OK 587ms]
2454
最新回復
  • 6月前
    1 #

    實際上,您不必擴充套件 Post 模型( wp.api.models.Post )或 Posts 集合( wp.api.collections.Posts ),因為文件中說:

    you will get new models and collections when you add REST API support to your custom post type

    這意味着,您的自定義帖子型別將自動添加到 wp.api.modelswp.api.collections 列表,即 wp.api.models.<key>wp.api.collections.<key> 从而 <key>post型別的子弹 in camel case .因此,在您的情况下,關键是 Pronews —或 ProNews 如果帖子型別為 pro-news

    因此,要訪問模型/集合(或簡稱為帖子),您需要做的所有事情是:

    // Access one model (a single post). ID is required.
    const post = new wp.api.models.Pronews( { id: 57 } );
    // Access a collection (multiple models/posts).
    const posts = new wp.api.collections.Pronews();
    

    容易,是吗? :)(如果需要,您可以擴充套件帖子型別的模型/集合。例如 const ProPost = wp.api.models.Pronews.extend( ... )

  • wordpress:自定義帖子型別,類別分開
  • drupal:我無法覆盖节點模板