¿Cómo obtiene las publicaciones de meta_query utilizando el complemento JSON API?

4

Me gustaría obtener una publicación con un método API utilizando un tipo de meta consulta. Tengo 2 campos personalizados "lugar" y "dayoweek" y quiero recuperar a través de la API llamar a todas las publicaciones que tienen algunos valores para estos 2 campos. Sería más o menos así si usas php

$args = array(
    'numberposts' => -1,
    'post_type' => 'event',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'place',
            'value' => 'Melbourne',

        ),
        array(
            'key' => 'dayoweek',
            'value' => 'saturday',

        )
    )

);

Mi problema es ... ¿cómo lo hace usando el método de obtención de publicaciones de la API JSON? ¿Cómo hacer esta llamada utilizando matrices ...

http://somewebiste/API/get_posts/?post_type=event&meta_key=place&meta_value=andorra&cat=1&meta_key=dayoweek&meta_value=saturday&orderby=title&order=ASC 
    
pregunta Sr. Glor 05.06.2014 - 23:42

2 respuestas

4

La solución tiene dos partes aquí.

  1. Debe usar un Controlador personalizado de API JSON
  2. En tu controlador personalizado, deberás decidir cómo pasar la estructura de datos meta_query

Dependiendo de qué tan robusto necesita que sea esto, podría utilizar una variedad de enfoques. Aquí está el enfoque maximalista, que permitirá a cualquier tipo meta_query , codificar la estructura como una cadena JSON.

<?php

// 1. The class name must match the filename (i.e., "foo.php" for JSON_API_Foo_Controller)
// 2. Save this in your themes folder
// 3. Activate your controller under Settings > JSON API

class JSON_API_Example_Controller {

  public function get_posts_by_meta_query() {
    global $json_api;

    if (empty($_GET['meta_query'])) {
      return array(
        'error' => "Specify a 'meta_query' param."
      );
    }

    $query = array(
      'ignore_sticky_posts' => true,
      'numberposts' => -1,
      'post_type' => 'event',
      'meta_query' => json_decode($_GET['meta_query'], true)
    );
    return array(
      'posts' => $json_api->introspector->get_posts($query)
    );
  }
}

?>

Entonces, si quieres pasar este meta_query como JSON codificado en URL:

$args = array(
  'numberposts' => -1,
  'post_type' => 'event',
  'meta_query' => array(
    'relation' => 'AND',
    array(
      'key' => 'place',
      'value' => 'Melbourne'
    ),
    array(
      'key' => 'dayoweek',
      'value' => 'saturday'
    )
  )
);

Codifíquelo así, en JavaScript:

var meta_query = encodeURIComponent(JSON.stringify({
  relation: 'AND',
  0: {
    key: 'place',
    value:'Melbourne'
  },
  1: {
    key: 'dayoweek',
    value: 'saturday'
  }
}));

Así es como se vería un parámetro de consulta de URL (un poco difícil de manejar): /?json=example/get_posts_by_meta_query&meta_query=%7B%220%22%3A%7B%22key%22%3A%22place%22%2C%22value%22%3A%22Melbourne%22%7D%2C%221%22%3A%7B%22key%22%3A%22dayoweek%22%2C%22value%22%3A%22saturday%22%7D%2C%22relation%22%3A%22AND%22%7D

    
respondido por el Dan Phiffer 06.06.2014 - 18:27
0

Encuentro una forma fácil de hacerlo (para mí) configurando los parámetros que necesita en su controlador directamente en la consulta.

$query = array(
      'ignore_sticky_posts' => true,
      'numberposts' => -1,
      'post_type' => 'event',

      'meta_query' => array(
        'relation' => 'AND',
        array(
          'key' => 'place',
          'value' => $_GET['place'],

          ),
        array(
          'key' => 'dayoweek',
          'value' => $_GET['dayoweek'],

          )
        ) 
      );

Entonces la URL se ve como: json=example/get_posts_by_meta_query&place=Toronto&dayoweek=saturday

Lo siento Si parece que estoy respondiendo automáticamente a mi pregunta, solo lo hago en caso de que alguien quiera tener otra forma de hacerlo.

    
respondido por el Sr. Glor 07.06.2014 - 17:57

Lea otras preguntas en las etiquetas