web-dev-qa-db-fra.com

Injecter une requête SQL personnalisée dans une page/un thème

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

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

Ou devrai-je cloner la page entière du thème principal au thème enfant et utiliser le code suivant:

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

Les hooks que vous recherchez se trouvent dans le Codex WordPress WP_Query - Filtres :

Les filtres

  • posts_distinct - Modifie la clause SQL 'DISTINCTROW' de la requête qui renvoie le tableau post.
  • posts_groupby - Modifie la clause SQL 'GROUP BY' de la requête qui retourne le tableau post.
  • posts_join - Modifie la clause SQL 'JOIN' de la requête qui retourne le tableau post.
  • post_limits - Modifie la clause SQL 'LIMIT' de la requête qui retourne le tableau post.
  • posts_orderby - Modifie la clause SQL 'ORDER BY' de la requête qui retourne 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 en utilisant la clause 'JOIN' de la requête qui renvoie le tableau de publications.
  • posts_where_paged - Modifie la pagination SQL pour les publications en utilisant la clause 'WHERE' de la requête qui renvoie le tableau de publications.
  • 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 Version 3.1 ).

Notez qu'il y a plus de filtres que ceux mentionnés. Comme il est difficile de garder le codex à jour, veuillez inspecter vous-même la fonction get_posts(); dans 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, tous les filtres mentionnés ne sont pas documentés. Vous pouvez faire beaucoup de choses avec ceux inclus dans la liste ci-dessus, mais il peut être nécessaire de jeter un coup d’œil sur le code source query.php pour avoir.

Par conséquent, sans connaître votre code SQL et vos plans exacts, je suppose que vous pouvez faire ce que vous voulez en utilisant un ou plusieurs de ces points. Une fois que vous avez rassemblé les informations dont vous avez besoin pour votre cas d'utilisation, jetez un coup d'œil/recherchez ici des implémentations similaires dans WPSE. Il existe de nombreuses approches suggérées pour différents scénarios.

1
Nicolai