Как отфильтровать пользовательские поля для пользовательских типов записей в API WordPress Rest? - PullRequest
0 голосов
/ 12 апреля 2019

Я использую стандарт WordPress с плагинами «Расширенные пользовательские поля» и «custom_post_type ui».Я создал post_type под названием deal и добавил несколько пользовательских полей.

Теперь мне нужно отфильтровать результаты при доступе к остальным API следующим образом:

http://localhost:8000/wp-json/wp/v2/deals

На самом деле янужна только акф часть.Я не беспокоюсь об остальном.

[{"id":29,"date":"2019-04-12T12:34:14","date_gmt":"2019-04- 
12T12:34:14","guid":{"rendered":"http:\/\/localhost:8000\/? 
post_type=deals&p=29"},"modified":"2019-04- 
12T12:34:14","modified_gmt":"2019-04-12T12:34:14",
"slug":"test-title","status":"publish","type":"deals",
"link":"http:\/\/localhost:8000\/deal s\/test- title\/","template":"",
"meta":[],"tax-deals":[],"acf":{"title":"Title for Deals 
Post","description":"","image":false,"date_start":"01.01.1970",
"date_end":"01.01.1970","category":"Kleidung"},"_links":{"self": 
[{"href":"http:\/\/localhost:8000\/wp-json\/wp\/v2\/deals\/29"}],
"collection":[{"href":"http:\/\/localhost:8000\/wp- 
json\/wp\/v2\/deals"}],"about":[{"href":"http:\/\/localhost:8000\/wp- 
json\/wp\/v2\/types\/deals"}],"wp:attachment": 
[{"href":"http:\/\/localhost:8000\/wp-json\/wp\/v2\/media? 
parent=29"}],"wp:term":[{"taxonomy":"tax_deals","embeddable":true,
"href":"http:\/\/localhost:8000\/wp-json\/wp\/v2\/tax-deals? 
post=29"}],"curies": 
[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},

Я уже пытался использовать

http://localhost:8000/wp-json/wp/v2/deals?search=id

, чтобы получить идентификатор или что-то, но ответ пуст.

Также этоне работает:

http://localhost:8000/wp-json/wp/v2/deals?id=28

Снова пустой ответ.

Подводя итог: мне нужно отфильтровать свой пользовательский тип записи по моим настраиваемым полям по атрибуту "acf", показанному в моем ответе json.Как это работает?

РЕДАКТИРОВАТЬ: Я уже установил "WP REST Filter", но до сих пор не знаю, как это сделать.

1 Ответ

1 голос
/ 14 апреля 2019

Я предлагаю вам создать новый API, где вы можете настроить вывод. Воспользуйтесь функцией wordpress register_rest_route(), с помощью которой вы можете создать API из CPT и ACF в одном URL-адресе ajax. И вам не нужно ничего устанавливать.

Проверьте, как я получаю свой инструктор CPT и mycheckbox ACF.

// your ajaxurl will be: http://localhost/yoursite/wp-json/custom/v2/instructor/
add_action( 'rest_api_init', function () {
  register_rest_route( 'custom/v2', '/instructor', array(
              'methods' => 'GET',
              'callback' => 'instructor_json_query',
  ));
});

// the callback function 
function instructor_json_query(){

   // args to get the instructor
   $args = array(
     'post_type' => 'instructor',
     'posts_per_page' => -1,
     'post_status' => 'publish',
     'meta_query' => array(
          array(
             'key' => 'mycheckbox', // your acf key
             'compare' => '=',
             'value' => '1' // your acf value
          )
      )
   );

 $posts = get_posts($args); 

 // check if $post is empty
 if ( empty( $posts ) ) {
     return null;
 }

 // Store data inside $ins_data 
 $ins_data = array();
 $i = 0;

 foreach ( $posts as $post ) {
    $ins_data[] = array(  // you can ad anything here and as many as you want
       'id' => $posts[$i]->ID,
       'slug' => $posts[$i]->post_name,
       'name' => $posts[$i]->post_title,
       'imgurl' => get_the_post_thumbnail_url( $posts[$i]->ID, 'medium' ),
    );
    $i++;
  }

  // Returned Data     
  return $ins_data;

 }

Затем вы можете использовать ссылку: http://localhost/yoursite/wp-json/custom/v2/instructor/ в вашем URL AJAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...