WP REST API ดึงข้อมูลโพสต์จากประเภทโพสต์


15

ฉันจะรับโพสต์ทั้งหมดจากประเภทโพสต์ที่กำหนดเองเฉพาะด้วย WP REST API (v1 หรือ v2) ได้อย่างไร ฉันใหม่มากในเรื่องนี้และพยายามที่จะเข้าใจวิธีการทำเช่นนั้น

ขณะนี้ฉันใช้ WP REST API v2 และจัดการเพื่อดึงรายการประเภทโพสต์ทั้งหมดด้วยสิ่งนี้

http://domain.com/wp-json/wp/v2/types

จากนั้นจัดการเพื่อรับประเภทโพสต์ที่ฉันสนใจ

http://domain.com/wp-json/wp/v2/types/the-icons-update

ฉันจะรับโพสต์ทั้งหมดจากประเภทเนื้อหานั้น ๆ ได้อย่างไร

ฉันได้ลองด้วย

http://domain.com/wp-json/wp/v2/posts?filter[post_type]=the-icons-update

แต่มันคืนค่าอาเรย์ที่ว่างเปล่า (ฉันคิดว่ามันส่งคืนโพสต์เริ่มต้นและบนเว็บไซต์ของฉันมีเฉพาะโพสต์ในประเภทโพสต์ที่กำหนดเองที่ฉันพยายามเรียกคืน)

ฉันจะลงทะเบียนประเภทโพสต์ได้หรือไม่

function custom_post_type() {
$labels = array(
    'name'               => _x( 'The Icons Update', 'post type general name' ),
    'singular_name'      => _x( 'The Icons Update', 'post type singular name' ),
    'add_new'            => _x( 'Add Page', 'magazine' ),
    'add_new_item'       => __( 'Add New Page' ),
    'edit_item'          => __( 'Edit Page' ),
    'new_item'           => __( 'New Page' ),
    'all_items'          => __( 'All Pages' ),
    'view_item'          => __( 'View Page' ),
    'search_items'       => __( 'Search Pages' ),
    'not_found'          => __( 'No Page found' ),
    'not_found_in_trash' => __( 'No Page found in the Trash' ), 
    'parent_item_colon'  => '',
    'menu_icon'          => '',
    'menu_name'          => 'The Icons Update'
);
$args = array(
    'labels'        => $labels,
    'description'   => 'Holds our projects and project specific data',
    'public'        => true,
    'menu_position' => 5,
    'supports'      => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields' ),
    'has_archive'   => true,
    'taxonomies'    => array('post_tag', 'category'),
    'hierarchical'  => false,
    'query_var'     => true,
    'queryable' => true,
        'searchable'    => true,
    'rewrite'       => array( 'slug' => 'the-icons-update' )
);
register_post_type( 'magazine', $args );
flush_rewrite_rules();
}
add_action( 'init', 'custom_post_type' );

ความช่วยเหลือใด ๆ กับเรื่องนี้เป็นที่ชื่นชมจริงๆ

คำตอบ:


18

เพียงเพิ่ม parmater ถัดไปลงในฟังก์ชั่น register_post_type มันสามารถอยู่ก่อนพารามิเตอร์ 'menu_position'parameter' 'show_in_rest' => จริง

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณใช้ปลั๊กอินเพื่อลงทะเบียน posttype ของคุณคุณสามารถใช้รหัสถัดไป:

add_action( 'init', 'add_anuncios_to_json_api', 30 );
function add_anuncios_to_json_api(){
    global $wp_post_types;
    $wp_post_types['anuncio']->show_in_rest = true;
}

หลังจากนั้นคุณจะสามารถแสดงรายการโพสต์ของคุณจาก mydomain.com/wp-json/wp/v2/posttype_slug

ในกรณีของฉัน: mydomain.com/wp-json/wp/v2/anuncio

คุณสามารถลงทะเบียนฐานใหม่โดยใช้รหัสถัดไป:

add_action( 'init', 'add_anuncios_to_json_api', 30 );
function add_anuncios_to_json_api(){
    global $wp_post_types;
    $wp_post_types['anuncio']->show_in_rest = true;
    $wp_post_types['anuncio']->rest_base = 'clasi';
    $wp_post_types['anuncio']->rest_controller_class = 'WP_REST_Posts_Controller';
}

เพียงแค่แทนที่anuncioกระสุนของโพสต์ประเภทของคุณและ 'clasi' จะเป็นเส้นทางของคุณ mydomain.com/wp-json/wp/v2/clasi


ขอบคุณนี่เกือบแก้ไขปัญหาของฉัน! ตอนนี้ฉันได้รับโพสต์จากประเภทโพสต์ที่เฉพาะเจาะจง แต่ไม่ปรากฏทั้งหมดและยังมีข้อมูลไม่ครบถ้วนตัวอย่างเช่นหมวดหมู่ไม่อยู่ในรายการและฉันต้องการฟิลด์ที่กำหนดเองขั้นสูงที่จะแสดงรายการ (ใน WP REST API v1.2.3 ฉันจัดการเพื่อให้ ACF ปรากฏ) ขอบคุณสำหรับความช่วยเหลือของคุณในเรื่องนี้
Jeff

4

ในการแสดงประเภทโพสต์ที่กำหนดเองในรุ่นที่ 2 คุณต้องเพิ่ม'show_in_rest' => trueในอาร์กิวเมนต์ของฟังก์ชัน register_post_type แล้วโพสต์ของคุณด้วยการโพสต์ที่กำหนดเองชนิดจะสามารถใช้ได้ที่ปลายทาง: WP-JSON / WP / v2 / คุณกำหนดเองโพสต์ชนิด

ที่มา: http://scottbolinger.com/custom-post-types-wp-api-v2/


0

คุณควรใช้สิ่งนี้: -

http://domain.com/wp-json/wp/v2/posts?job-type=your-post-type 

หวังว่ามันจะทำงาน :)


ขอบคุณมากสำหรับการตอบกลับของคุณ แต่นั่นไม่ได้ผล :(
Jeff

โปรดทราบว่าถ้าคุณตั้งค่า query_var เป็นเท็จเมื่อลงทะเบียน taxonomy ที่กำหนดเองคุณจะต้องเปลี่ยนพารามิเตอร์เป็น: wp-json / wp / v2 / posts /? taxonomy = job-type & term = manager (เป็นเพียงตัวอย่าง)
dev

ขอบคุณ แต่มันก็ใช้งานไม่ได้ ฉันจะลงทะเบียนประเภทโพสต์ที่กำหนดเองได้หรือไม่ ฉันมีการปรับปรุงคำถามหากคุณอาจจะใช้เวลาดูที่มันฉันจะขอบคุณมาก
เจฟฟ์

ใช่เพียงแค่การตรวจสอบปรับปรุงคำตอบ
dev

0

ตกลงนี่คือคำตอบที่สมบูรณ์ของฉัน: -

function prefix_register_post_type()
{
  register_post_type(
    'prefix_portfolio',
    array(
      'labels'        => array(
        'name'               => __('Portfolio', 'text_domain'),
        'singular_name'      => __('Portfolio', 'text_domain'),
        'menu_name'          => __('Portfolio', 'text_domain'),
        'name_admin_bar'     => __('Portfolio Item', 'text_domain'),
        'all_items'          => __('All Items', 'text_domain'),
        'add_new'            => _x('Add New', 'prefix_portfolio', 'text_domain'),
        'add_new_item'       => __('Add New Item', 'text_domain'),
        'edit_item'          => __('Edit Item', 'text_domain'),
        'new_item'           => __('New Item', 'text_domain'),
        'view_item'          => __('View Item', 'text_domain'),
        'search_items'       => __('Search Items', 'text_domain'),
        'not_found'          => __('No items found.', 'text_domain'),
        'not_found_in_trash' => __('No items found in Trash.', 'text_domain'),
        'parent_item_colon'  => __('Parent Items:', 'text_domain'),
      ),
      'public'        => true,
      'menu_position' => 5,
      'supports'      => array(
        'title',
        'editor',
        'thumbnail',
        'excerpt',
        'custom-fields',
      ),
      'taxonomies'    => array(
        'prefix_portfolio_categories',
      ),
      'has_archive'   => true,
      'rewrite'       => array(
        'slug' => 'portfolio',
      ),
    )
  );
}

add_action('init', 'prefix_register_post_type');


function prefix_register_taxonomy()
{
  register_taxonomy(
    'prefix_portfolio_categories',
    array(
      'prefix_portfolio',
    ),
    array(
      'labels'            => array(
        'name'              => _x('Categories', 'prefix_portfolio', 'text_domain'),
        'singular_name'     => _x('Category', 'prefix_portfolio', 'text_domain'),
        'menu_name'         => __('Categories', 'text_domain'),
        'all_items'         => __('All Categories', 'text_domain'),
        'edit_item'         => __('Edit Category', 'text_domain'),
        'view_item'         => __('View Category', 'text_domain'),
        'update_item'       => __('Update Category', 'text_domain'),
        'add_new_item'      => __('Add New Category', 'text_domain'),
        'new_item_name'     => __('New Category Name', 'text_domain'),
        'parent_item'       => __('Parent Category', 'text_domain'),
        'parent_item_colon' => __('Parent Category:', 'text_domain'),
        'search_items'      => __('Search Categories', 'text_domain'),
      ),
      'show_admin_column' => true,
      'hierarchical'      => true,
      'rewrite'           => array(
        'slug' => 'portfolio/category',
      ),
    )
  );
}

add_action('init', 'prefix_register_taxonomy', 0);

คุณควรลงทะเบียน taxonomy ขณะลงทะเบียนโพสต์ที่กำหนดเอง

หลังจากนี้คำขอจะเป็น:

wp-json/wp/v2/posts/?taxonomy=prefix_portfolio_categories'&term=your-any-category

หวังว่านี่จะช่วยคุณได้ :)


ขอบคุณล้านสำหรับความพยายามของคุณในเรื่องนี้ แต่น่าเสียดายที่มันไม่ได้ผลเช่นกัน ฉันแน่ใจว่าฉันค่อนข้างใกล้ แต่ฉันไม่เข้าใจว่าปัญหาจะเป็นอย่างไร ขอบคุณอีกครั้ง
Jeff
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.