web-dev-qa-db-fra.com

Comment exécuter la requête de sélection de publication avec la catégorie et les balises pour l'API?

Je veux aller chercher plusieurs articles avec des catégories et des tags. En fait, je crée une API pour mon site Wordpress, le code complet ressemble à ceci:

 $mysql = mysqli_query($con,"SELECT p.post_title,
       p.ID,
       p.post_content,
       p.post_date,
       p.post_name as url,
       t.name as category_name
FROM wp_posts p,
     wp_terms t,
     wp_term_relationships r,
     wp_term_taxonomy tt
WHERE p.post_status='publish' AND
      tt.taxonomy = 'post_tag' AND
      p.id=r.object_id AND
      r.term_taxonomy_id=tt.term_taxonomy_id AND
      tt.term_id = t.term_id order by p.post_date desc limit ".(int)($pageNumber*$pageSize).",".(int)$pageSize."") or die ("error".mysqli_error($con));
   $count = mysqli_num_rows($mysql);

La connexion MySQLi fonctionne. Mais lorsque je lance ce code, je ne reçois qu'une page vierge. Comment puis-je réparer cela?

1
M GR

WordPress a déjà une API que vous pouvez étendre et une classe pour interroger les publications!

Par exemple:

// when the rest_api_init action/event happens
add_action( 'rest_api_init', function () {
  // register a new endpoint
  register_rest_route( 'mohnish/v1', '/posts/', array(
    'methods' => 'GET',
    'callback' => 'mohnish_awesome_func', // that calls this function
  ) );
} );

// this is whats called when something hits the endpoint
function mohnish_awesome_func( WP_REST_Request $request ) {
    // grab the parameters
    $category = $request->get_param( 'category' );
    $tag = $request->get_param( 'tag' );

    // run the query to fetch the data
    $q = new WP_Query( [
        'category_name' => $category,
        'tag' => $tag,
        // etc...
    ]);
    $results = []; // an empty array to hold our results

    if ( $q->have_posts() ) {
        while( $q->have_posts() ) {
            $q->the_post();
            // add a new result to the list
            $results[] = [
                'title' => get_the_title(),
                // etc...
            ];
        }
    }

    return $results; // the REST API will automagically convert this to json
}

Cela vous permettrait d'écrire des URL telles que:

https://example.com/wp-json/mohnish/v1/posts/?category=foo&tag=bar

Et récupérez une structure de données JSON avec des informations.

Heureusement, Core a déjà un noeud final de publications qui fait beaucoup de ce que vous voulez faire avec /wp-json/wp/v2/posts, voici un exemple avec un site actif:

curl http://demo.wp-api.org/wp-json/wp/v2/posts

Vous pouvez voir un schéma complet de ce qu'il retourne ici avec des exemples sur la suppression d'une publication et la saisie de publications individuelles ici, ainsi que un manuel décrivant comment utiliser toutes ses fonctionnalités et l'étendre

1
Tom J Nowell