WP REST API, posta türünden yayınlar getiriyor


15

WP REST API (v1 veya v2) ile belirli bir özel yazı türündeki tüm gönderileri nasıl alabilirim? Ben bu konuda çok yeniyim ve bunu nasıl yapacağımı anlamaya çalışıyorum.

Şu anda WP REST API v2 kullanıyorum ve bu ile tüm yazı türlerinin bir listesini getirmeyi başardı

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

ve sonra ilgilendiğim yazı türünü almayı başardım

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

Söz konusu içerik türündeki tüm yayınları nasıl alabilirim?

İle denedim

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

Ancak boş bir dizi döndürür (varsayılan yayınları döndürdüğünü varsayalım ve sitemde almaya çalıştığım özel yazı türünün içinde yalnızca yayınlar var).

Gönderi türünü kaydettirmeyle ilgili bir sorun olabilir mi?

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' );

Bu konuda herhangi bir yardım gerçekten takdir edilmektedir.

Yanıtlar:


18

Bir sonraki parçayı register_post_type fonksiyonuna ekleyin, 'menu_position' parametresinden önce olabilir. 'show_in_rest' => doğru

resim açıklamasını buraya girin

posta türünüzü kaydetmek için bir eklenti kullanıyorsanız bir sonraki kodu kullanabilirsiniz:

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;
}

bundan sonra, mydomain.com/wp-json/wp/v2/posttype_slug adresinden yayınlarınızı listeleyebileceksiniz

benim durumumda: alanadim.com/wp-json/wp/v2/anuncio

sonraki kodu kullanarak yeni bir taban da kaydedebilirsiniz:

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';
}

sadece anuncioyazı tipi slug için değiştirin ve 'clasi' rotanız olacak. mydomain.com/wp-json/wp/v2/clasi


Teşekkür ederim, bu neredeyse sorunumu çözdü! Şimdi bu belirli yazı türünden bazı yayınlar alıyorum, ancak hepsi görünmüyor ve ayrıca verileri tam değil, örneğin kategori listelenmiyor ve ayrıca listelenecek gelişmiş özel alanlara ihtiyacım var (WP REST API v1.2.3'te ACF'nin görünmesini sağladım). Bu konudaki yardımınız için teşekkür ederiz
Jeff

4

Sürüm 2'de özel gönderi türlerini göstermek 'show_in_rest' => trueiçin register_post_type işlev bağımsız değişkenlerini eklemeniz gerekir ; bu özel gönderi türüne sahip gönderileriniz uç noktada bulunur: wp-json / wp / v2 / özel-post-türünüz .

Kaynak: http://scottbolinger.com/custom-post-types-wp-api-v2/


0

Bunu kullanmalısınız: -

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

Umarım çalışır :)


Cevabınız için çok teşekkür ederim ama işe yaramadı :(
Jeff

Özel sınıflandırmayı kaydederken query_var değerini false olarak ayarlarsanız, parametreleri şu şekilde değiştirmeniz gerektiğini unutmayın: wp-json / wp / v2 / posts /? Taxonomy = job-type & term = manager (bu sadece bir örnek)
dev

Teşekkür ederim ama işe yaramadı. Özel gönderi türünü kaydettirmeyle ilgili bir sorun olabilir mi? Soruyu güncelledim, eğer bir göz atabilirseniz çok minnettar olurum
Jeff

Evet, sadece güncellenmiş cevabı kontrol etti
dev

0

Tamam işte tam cevabım: -

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);

Özel yayını kaydederken de sınıflandırmayı kaydetmelisiniz.

Bundan sonra istek:

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

Umarım bu size yardımcı olabilir :)


Bu konuda gösterdiğiniz çaba için bir milyon teşekkürler ama maalesef bu da işe yaramadı. Eminim oldukça yakınım ama sorunun ne olabileceğini anlamıyorum. Tekrar teşekkürler
Jeff
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.