2017-06-27 22 views
1

REST APIカスタム投稿のクエリの結果をメタ値で並べ替えることができる必要があります。WP REST API orderby meta_value

そうすることが困難です。

私はREST APIに私のポストタイプが利用可能になっていると日付、タイトルなどで注文することができ

...

をしかし、私はポストメタをしようとすると、それは動作しません。

機能を有効にするために次のコードを追加しましたが、既定値は日付順になります。私はWordPress 4.8実行無駄https://wordpress.stackexchange.com/questions/251037/wp-rest-api-order-posts-by-meta-value-acf

に、ここで指示に従って試してみました

答えて

1

は法の下に参照してください無駄に4.7のテストを試してみましたmysite.com/wp-json/wp/v2/hh_equipment?filter[orderby]=meta_value_num&meta_key=equipment_price&order=desc

function my_add_meta_vars ($current_vars) { 
    $current_vars = array_merge ($current_vars, array('meta_key', 'meta_value')); 
    return $current_vars; 
} 
add_filter ('query_vars', 'my_add_meta_vars'); 
add_filter ('rest_query_vars', 'my_add_meta_vars'); 

私のREST APIのクエリがあります、 私は、許可されているmeta_key値を検証する新しいargsエントリを追加するために、既存のルートを変更しました。このようにして、残りのクエリvarsも変更する必要はありません。

add_filter('rest_endpoints', function ($routes) { 
     // I'm modifying multiple types here, you won't need the loop if you're just doing posts 
     foreach (['some', 'types'] as $type) { 
      if (!($route =& $routes['/wp/v2/' . $type])) { 
       continue; 
      } 

      // Allow ordering by my meta value 
      $route[0]['args']['orderby']['enum'][] = 'meta_value_num'; 

      // Allow only the meta keys that I want 
      $route[0]['args']['meta_key'] = array(
       'description'  => 'The meta key to query.', 
       'type'    => 'string', 
       'enum'    => ['my_meta_key', 'another key'], 
       'validate_callback' => 'rest_validate_request_arg', 
      ); 
     } 

     return $routes; 
    }); 

REF:https://github.com/WP-API/WP-API/issues/2308

+0

もそれを動作させるために、この[リンク](https://github.com/WP-API/WP-API/issues/2308#issuecomment-265875108)を追加する必要がありました。 '$ type = 'custom_post_type'; ($ key = $ request-> get_param( 'meta_key')){ \t $ args ['meta_key'] {の場合は、 ] = $ key; \t} \t return $ args; \t}、10,2); ' –

関連する問題