WordPress : Injecter une requête sql personnalisée dans une page/un thème

Publié par Jean-Michel le

J’ai écrit une requête sql personnalisée pour notre site Web WordPress (assez élaborée et non réalisable avec le code wordpress standard) et je l’ai fait exécuter via $pageposts = $wpdb->get_results($query, OBJECT);, elle donne les résultats que j’attends. Maintenant, j’aimerais intégrer cette requête via un crochet (idéalement), afin de ne pas avoir à mettre à jour la page du thème afin que nous puissions toujours mettre à jour le thème. Je sais que le crochet pre_get_posts()vous permet d’ajuster la requête principale, mais d’après ce que j’ai trouvé, il ne semble vous permettre que d’ ajuster . Par exemple $query->set( 'year', $today['year'] );. Cependant, je souhaite remplacer complètement la requête.

Est-ce faisable en utilisant un crochet afin que je puisse utiliser le code du thème principal en utilisant un crochet du code de mon thème enfant ?

Ou dois-je cloner la page entière du thème principal vers le thème enfant et utiliser le code comme ceci :

<?php
$pageposts = $wpdb->get_results($q, OBJECT);
if ($pageposts):
    global $post;
    foreach ($pageposts as $post):
        setup_postdata($post);
?>

Solution n°1 trouvée

Les crochets que vous recherchez se trouvent dans le Codex WordPress WP_Query– Filtres :

Filtres

  • posts_distinct – Modifie la clause SQL ‘DISTINCTROW’ dans la requête qui renvoie le tableau post.
  • posts_groupby – Modifie la clause SQL ‘GROUP BY’ de la requête qui renvoie le tableau post.
  • posts_join – Modifie la clause SQL ‘JOIN’ de la requête qui renvoie le tableau post.
  • post_limits – Modifie la clause SQL ‘LIMIT’ de la requête qui renvoie le tableau post.
  • posts_orderby – Modifie la clause SQL ‘ORDER BY’ de la requête qui renvoie le tableau post.
  • posts_where – Modifie la clause SQL ‘WHERE’ de la requête qui renvoie le tableau post.
  • posts_join_paged – Modifie la pagination SQL pour les publications à l’aide de la clause ‘JOIN’ de la requête qui renvoie le tableau de publication.
  • posts_where_paged – Modifie la pagination SQL pour les publications à l’aide de la clause ‘WHERE’ de la requête qui renvoie le tableau de publication.
  • posts_clauses – Modifie toutes les clauses SQL ci-dessus en une seule fois. Il vous donne un tableau d’éléments faciles à modifier (disponible avec la version 3.1).

Notez qu’il y a plus de filtres que ceux mentionnés. Comme il est difficile de maintenir le codex à jour, veuillez inspecter vous-même la get_posts();fonction à l’intérieur de la classe WP_Query (/wp-includes/query.php).

Premièrement, comme le dit la note, il y a plus de filtres que mentionné et, deuxièmement, parmi les filtres mentionnés, ils ne sont pas tous documentés. Vous pouvez faire beaucoup avec ceux inclus dans la liste ci-dessus, mais il peut être nécessaire de jeter un coup d’œil à la source query.phpvous-même, pour trouver toutes les possibilités dont vous disposez.

Par conséquent, sans connaître votre SQL et vos plans exacts, je suppose que vous pouvez faire ce que vous voulez en utilisant un ou plusieurs de ces crochets. Après avoir rassemblé les informations dont vous avez besoin pour votre cas d’utilisation, jetez un coup d’œil/recherchez ici sur WPSE pour des implémentations similaires, il existe de nombreuses approches suggérées pour différents scénarios, vous pourriez donc trouver ce dont vous avez besoin.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *