WP REST API извлекает сообщения из типа сообщения

Как я могу получить все сообщения определенного пользовательского типа с помощью WP REST API (версия 1 или версия 2)? Я очень новичок в этом и пытаюсь понять, как это сделать.

В настоящее время я использую 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' );

Любая помощь в этом очень ценится.


person Jeff    schedule 04.09.2015    source источник


Ответы (4)


Для v.2 есть действительно быстрый и простой способ. Все, что вам нужно сделать, это включить в массив args следующее свойство: 'show_in_rest' => true

Пример:

register_post_type( 'recipe',
     array(
          'labels' => $labels,
          'public' => true,
          'menu_position' => 5,
          'hierarchical' => false,
          'supports' => $supports,
          'show_in_rest' => true,
          'taxonomies' => array('recipe-type', 'post_tag'),
          'rewrite' => array( 'slug' => __('recipe', 'recipe') )
     )
);
person Hristo Eftimov    schedule 05.07.2016
comment
Куда мне это добавить? Спасибо. - person Si8; 30.11.2017
comment
@Si8 в вашем functions.php файле ;) - person Hristo Eftimov; 30.11.2017
comment
Я хочу указать только идентификатор сообщения и все. Будет ли вышеописанное работать? Я могу открыть новый вопрос, если это оправдано. Спасибо - person Si8; 30.11.2017
comment
Я никогда не пробовал с идентификатором поста, но я думаю, что это должно работать :) - person Hristo Eftimov; 30.11.2017

Чтобы использовать v2 плагина REST API:

В файле functions.php вашей темы добавьте следующее, чтобы создать конечную точку отдыха:

add_action( 'init', 'add_myCustomPostType_endpoint');
function add_myCustomPostType_endpoint(){

    global $wp_post_types;
    $wp_post_types['myCustomPostType']->show_in_rest = true;
    $wp_post_types['myCustomPostType']->rest_base = 'myCustomPostType';
    $wp_post_types['myCustomPostType']->rest_controller_class = 'WP_REST_Posts_Controller';
}

Теперь у вас должна быть следующая конечная точка для запроса:

/wp-json/wp/v2/myCustomPostType

myCustomPostType — это зарегистрированный вами настраиваемый тип записи. «rest_base» не обязательно должен совпадать с именем вашего пользовательского типа записи.

Скорее всего, вы захотите добавить дополнительные поля, относящиеся к вашему пользовательскому типу сообщений, такие как метаданные сообщений или, возможно, из Расширенные настраиваемые поля. В этих случаях вы можете включить эти свойства, добавив в файл functions.php такой фрагмент кода:

function add_myCustomPostType_fields_url_to_myCustomPostType_request( $data, $post, $request ) {
    $_data = $data->data;

    $customImageProperty = get_field('customImageProperty'); 

    $_data['customImageProperty'] = $customImageProperty['url'];

    $data->data = $_data;
    return $data;
}
add_filter( 'rest_prepare_myCustomPostType', 'add_myCustomPostType_fields_url_to_myCustomPostType_request', 10, 3 );
person Gaff    schedule 25.01.2016

register_post_type('имя типа сообщения'...) не имя 'add_new'. Измените название вашего типа сообщения на Журнал и проверьте результат. Надеюсь, поможет.

person Dimitar Stoyanov    schedule 05.09.2015
comment
Спасибо, я внес это изменение, но, к сожалению, это не решило мою проблему. Я вернулся к v1 плагина REST API и с domain.com/wp-json/ posts?type=magazine Мне удалось получить сообщения из этого определенного типа сообщений. Спасибо - person Jeff; 07.09.2015

Вернувшись к v1 плагина REST API и с помощью /wp-json/posts?type=name-of-post-type, мне удалось получить сообщения из этого конкретного типа сообщений.

person Jeff    schedule 07.09.2015