carhop__carhop-theme__DEV/includes/api.php

126 lines
2.8 KiB
PHP

<?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 (authors = relation multiple, main_author = auteur principal)
if (!empty($auteur) && $auteur != '1') {
$args['meta_query'] = array(
'relation' => 'OR',
array(
'key' => 'authors',
'value' => '"' . $auteur . '"',
'compare' => 'LIKE',
),
array(
'key' => 'main_author',
'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;
}