Prenez cette requête de base:
$posts = new WP_Query(array(
'post_type' => 'page'
's' => 'some search query'
));
WordPress divisera le some search query
en 3 termes de recherche distincts, c'est pourquoi je dois créer cette fonction $ wpdb. Je veux les mêmes fonctionnalités, mais avec la requête entière traitée comme un terme de recherche.
Voici où je suis:
global $wpdb;
$post_type = 'product';
$db_matches = $wpdb->get_results("
SELECT ID
FROM $wpdb->posts
INNER JOIN $wpdb->term_relationships ON $wpdb->term_relationships.object_id = $wpdb->posts.post_title
WHERE post_title LIKE '%$query%'
AND post_type = '$post_type'
AND post_status = 'publish'
");
C'est ma première jointure interne, alors c'est probablement tout faux. Deux choses doivent être faites pour résoudre cette requête:
WHERE
(devrait ressembler à AND term_taxonomy_id = 2
, n'est-ce pas?). J'utilise Polylang, donc je dois juste vérifier que le object_id
existe dans la table term_relationships
avec la valeur 2
.Alors quelqu'un peut-il me donner un coup de main avec ça? Merci beaucoup.
Il semble que vous dans votre INNER JOIN, vous rejoignez sur
wp_term_relationships.object_id == wp_posts.post_title
ce qui est erroné, carobject_idest le post-id dans ce scénario.
Je veux tous les identifiants (post-ids)
SELECT ID FROM $wpdb->posts
Qui ont un enregistrement dans la table wp_term_relationships
// Now we are comparing the correct columns
INNER JOIN $wpdb->term_relationships ON $wpdb->term_relationships.object_id = $wpdb->posts.ID
Ajout de la clause where supplémentaire
Où term_taxonomy_id est égal à 2
WHERE $wpdb->term_relationships.term_taxonomy_id = 2
WordPress divisera la requête de recherche en 3 termes de recherche distincts, c'est pourquoi je dois créer cette fonction $ wpdb. Je veux les mêmes fonctionnalités, mais avec la requête entière traitée comme un terme de recherche.
Il existe les paramètres de recherche d'entrée sentence
et exact
pour WP_Query
.
Au lieu de construire manuellement la requête de recherche, essayez, par exemple, par exemple.
$query = new WP_Query( [
'post_type' => 'page',
's' => 'some search query',
'sentence' => true,
'exact' => true,
] );
La requête SQL générée comprendra:
(wp_posts.post_title LIKE 'some search query') OR
(wp_posts.post_excerpt LIKE 'some search query') OR
(wp_posts.post_content LIKE 'some search query')
Avec exact
comme false
, il sera remplacé par:
(wp_posts.post_title LIKE '%some search query%') OR
(wp_posts.post_excerpt LIKE '%some search query%') OR
(wp_posts.post_content LIKE '%some search query%')
J'espère que ça aide!