2010-06-12 8 views
1

Je suis en train d'écrire un plugin pour wordpress et je veux créer ma propre recherche. J'ai essayé de modifier la recherche wordpress, mais ce que je fais est très spécifique avec la requête SQL. Je compare les coordonnées lat et long et je reçois des messages basés sur cela.en utilisant WP_Query avec SQL personnalisé dans wordpress

Je peux afficher des messages en utilisant la requête wpdb standard, mais je ne reçois pas les autres fonctionnalités comme la pagination. J'aimerais pouvoir utiliser mon instruction SQL avec la fonction WP_Query. Si j'ai raison de penser, je devrais alors pouvoir utiliser la pagination et d'autres fonctionnalités qui proviennent de la variable globale $ posts.

Est-ce vrai? J'ai googlé pendant des heures mais je ne trouve rien pour les plugins en dehors de l'utilisation des args pour sélectionner les catégories, etc. J'ai simplement besoin d'envoyer une commande SQL complète - rien d'autre.

Un grand merci ....

Répondre

3

Vous pourriez ne pas finir avec des requêtes SQL la plus optimale, mais si vous obtenez un tableau de tous les ID de poste que vous souhaitez utiliser (en utilisant d'abord votre propre SQL) , puis en utilisant WP_Query avec les arguments post__in et posts_per_page, WordPress gérera tout pour vous (y compris les limites SQL, la pagination et ainsi de suite).

+0

merci de répondre ... cela sonne comme si cela allait fonctionner! Mon seul problème (je pense) est que je fais l'appel de base de données après le chargement de la page. J'utilise un shortcode pour charger la fonction plugin et cela fait ensuite la requête. Je suppose que si je change la requête SQL à une fonction d'en-tête qui fonctionnerait? –

+0

Utilisez-vous le shortcode dans une seule page, ou un post qui sera dans la boucle? – TheDeadMedic

+0

le code court serait à l'intérieur d'une boucle. Je crée une nouvelle page et dans le corps du contenu, je mets [exemple]. L'exemple appelle alors ma fonction qui va interroger le SQL personnalisé –

0

Il existe un filtre nommé posts_where_paged qui vous donnera la partie WHERE de la requête SQL générée. Modifiez cela avec vos comparaisons SQL supplémentaires. De cette façon, vous ne modifiez pas la façon dont WordPress charge la page, vous modifiez simplement les données qu'il extrait de la base de données.

Si les données que vous extrayez ne figurent pas dans l'ensemble normal de tables interrogées pendant la recherche, vous devrez également modifier les tables examinées avec le filtre posts_join_paged. (au moins je pense que c'est celui-là;))

Regardez autour de la ligne 2376 de wp-includes/query.php pour voir les filtres que vous pouvez utiliser pour modifier la requête db.

1

Pour le bénéfice de n'importe qui trouvant ceci, à partir de WordPress 3.1 vous pouvez maintenant utiliser un filtre pour modifier directement le SQL utilisé par $ wp_query.