web-dev-qa-db-ja.com

Wordpress複数のパラメーターを持つAPIエンドポイントを追加する

だから私はほとんどの部分でwp restコントローラーがどのように機能するか、それが何をしているのか、なぜそれがそれを行うための最良の方法であるのかを理解しています。私が抱えている問題は、関数register_rest_routeのエンドポイントURLの正規表現に頭を抱えていることです。

正規表現とはそういうものですが、この文脈で誰かが私のためにそれを分解できるかどうか疑問に思いました。

いくつかのサンプルコード

register_rest_route( $this->namespace, '/' . $this->resource_name . '/(?P<id>[\d]+)', array(
        // Notice how we are registering multiple endpoints the 'schema' equates to an OPTIONS request.
        array(
            'methods'   => 'GET',
            'callback'  => array( $this, 'get_item' ),
            'permission_callback' => array( $this, 'get_item_permissions_check' ),
        ),
        // Register our schema callback.
        'schema' => array( $this, 'get_item_schema' ),
    ) );

したがって、(?P<id>[\d]+)少し混乱します。これは、idのパラメーターが必要であることを意味しますが、複数のパラメーターが必要な場合、および/ vendor/v1 /のようなルートが必要な場合geolocate/{param}/{param}or/ vender/v1 /?id = {param}&address = {param }

2
Aaron Blakeley

私は同じ問題を抱えています、私は最終的に上記の答えの助けを借りてグーグルで検索して解決策を見つけましたこれは他の人を助けるかもしれません。

$this->base = home
register_rest_route( 

        $namespace, '/' . $this->base . '/' .  'products' . '/', array(
            array( 
                'methods'   => WP_REST_Server::READABLE, 
                'callback'  => array( $this, 'rest_api_popular_products'), 
            ),
        )  
    );        
    register_rest_route(
        $namespace, '/' . $this->base . '/' .  'products' . '/(?P<category>[\d]+)/(?P<sort>[\w]+)', array(
            'args'   => array(
                'id' => array(
                    'description' => __( 'Unique identifier for the resource.', 'woocommerce' ),
                    'type'        => 'integer',
                ),
            ),
            array(
                'methods'             => WP_REST_Server::READABLE,
                'callback' => array( $this, 'rest_api_popular_products' ),                  
                'args'                => array(
                    'context' => $this->get_context_param( array( 'default' => 'view' ) ),
                ),
            )
        )
    );

次のようなAPIリクエスト:..wp-json/wc/v2/home/products /?category = 89&sort = popularity

0
Shameem Ali