FEATURE Introducing api main post query to integrate with archive filters
This commit is contained in:
parent
f49f7fd697
commit
e2ce4f4201
121
includes/api.php
Normal file
121
includes/api.php
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
<?php
|
||||
|
||||
add_action('rest_api_init', function () {
|
||||
|
||||
/* ----------------
|
||||
BUILDING ROUTES
|
||||
-----------------*/
|
||||
|
||||
|
||||
// ################ FILTER ARTICLES ################
|
||||
register_rest_route('carhop-datas/v1/build', '/posts', array(
|
||||
'methods' => 'GET',
|
||||
'callback' => 'build_posts',
|
||||
'permission_callback' => '__return_true',
|
||||
));
|
||||
|
||||
});
|
||||
|
||||
|
||||
// ################ FILTER POSTS ################
|
||||
|
||||
function build_posts($request)
|
||||
{
|
||||
$post_type = esc_html($request->get_param('post_type'));
|
||||
$etiquette = esc_html($request->get_param('etiquette'));
|
||||
$auteur = esc_html($request->get_param('auteur'));
|
||||
$sort_by = esc_html($request->get_param('sort_by'));
|
||||
$recherche = esc_html($request->get_param('recherche'));
|
||||
|
||||
|
||||
// Construire les arguments de la query WordPress
|
||||
$args = array(
|
||||
'post_type' => $post_type,
|
||||
'posts_per_page' => -1,
|
||||
);
|
||||
write_log("##########params");
|
||||
|
||||
write_log(array(
|
||||
'post_type' => $post_type,
|
||||
'etiquette' => $etiquette,
|
||||
'auteur' => $auteur,
|
||||
'sort_by' => $sort_by,
|
||||
'recherche' => $recherche,
|
||||
));
|
||||
|
||||
// Gestion du tri
|
||||
switch ($sort_by) {
|
||||
case 'date_desc':
|
||||
$args['orderby'] = 'date';
|
||||
$args['order'] = 'DESC';
|
||||
break;
|
||||
case 'date_asc':
|
||||
$args['orderby'] = 'date';
|
||||
$args['order'] = 'ASC';
|
||||
break;
|
||||
case 'title_asc':
|
||||
$args['orderby'] = 'title';
|
||||
$args['order'] = 'ASC';
|
||||
break;
|
||||
default:
|
||||
$args['orderby'] = 'date';
|
||||
$args['order'] = 'DESC';
|
||||
}
|
||||
|
||||
// Filtre par étiquette (taxonomie)
|
||||
if (!empty($etiquette) && $etiquette != '1') {
|
||||
$args['tax_query'] = array(
|
||||
array(
|
||||
'taxonomy' => 'etiquettes',
|
||||
'field' => 'slug',
|
||||
'terms' => $etiquette,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
// Filtre par auteur
|
||||
if (!empty($auteur) && $auteur != '1') {
|
||||
$args['meta_query'] = array(
|
||||
array(
|
||||
'key' => 'authors', // Ajustez selon votre structure
|
||||
'value' => $auteur,
|
||||
'compare' => 'LIKE'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Recherche par mot-clé
|
||||
if (!empty($recherche)) {
|
||||
$args['s'] = $recherche;
|
||||
}
|
||||
|
||||
$posts_query = new WP_Query($args);
|
||||
|
||||
write_log($posts_query->posts);
|
||||
|
||||
ob_start();
|
||||
if ($posts_query->have_posts()) :
|
||||
while ($posts_query->have_posts()) : $posts_query->the_post();
|
||||
get_template_part('template-parts/components/cards/post-card', null, array(
|
||||
'ID' => get_the_ID(),
|
||||
));
|
||||
endwhile;
|
||||
else :
|
||||
echo '<p>Aucun article trouvé.</p>';
|
||||
endif;
|
||||
wp_reset_postdata();
|
||||
|
||||
$html_template = ob_get_clean();
|
||||
|
||||
$response_data = array(
|
||||
'html_template' => $html_template,
|
||||
'post_count' => $posts_query->found_posts,
|
||||
'query_args' => $args, // Pour debug
|
||||
);
|
||||
$response = new WP_REST_Response($response_data);
|
||||
|
||||
$response->set_status(200);
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user