Obține postări după term id folosind interogări personalizate
Vreau să preiau postări personalizate folosind o interogare custom. Taxonomia mea este recipe_tx și termenii sunt (Beef), (Chicken) etc în ea.
Am încercat să folosesc
SELECT p.* FROM wp_posts p, wp_term_taxonomy tt, wp_term_relationships tr
WHERE p.ID=tr.`object_id`
AND tt.`term_id`=tr.`term_taxonomy_id`
AND (p.post_type = 'recipe_cpt')
AND p.post_status = 'publish'
AND tt.`term_taxonomy_id` = 37
dar fără succes.
poate cineva să mă ajute cum să obțin postările wp după term_id.
dacă id-ul pentru beef este 37 atunci vreau să preiau toate postările
cu term_id = 37
Mulțumesc

Ai încercat să folosești clasa WP_Query? S-ar putea să descoperi că e mai ușor să utilizezi instrumentele încorporate pentru asta decât o interogare personalizată de la zero. Ceva similar cu următorul cod ar trebui să funcționeze pentru tine:
<?php
$args = array(
'post_type' => 'recipe_cpt',
'tax_query' => array(
array(
'taxonomy' => 'recipe_tx',
'field' => 'term_id',
'terms' => 37
)
)
);
$query = new WP_Query( $args ); ?>
EDIT: atenție că tax_query
este un array de array-uri prin design. Multe probleme cu interogări taxonomice sunt rezultatul omiterii acestui detaliu.
EDIT: am corectat o greșeală de tipar în valoarea field
de mai sus, înlocuind 'id' cu 'term_id'.

Reține că valorile posibile pentru field
sunt term_id
, name
, slug
sau term_taxonomy_id
. Vezi https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

Știu că întrebarea a primit deja răspuns, dar dacă cineva încearcă să obțină același lucru cu o interogare SQL directă, puteți încerca următoarea soluție:
SELECT *
FROM wpiw_posts
WHERE ID IN (
SELECT object_id
FROM wpiw_term_relationships AS TR
INNER JOIN wpiw_term_taxonomy AS TT ON TR.term_taxonomy_id = TT.term_taxonomy_id
INNER JOIN wpiw_terms AS T ON TT.term_id = T.term_id
WHERE TT.taxonomy = 'recipe_tx' AND T.term_id = 37
)
Această interogare vă va returna toate articolele care aparțin taxonomiei specificate (recipe_tx) și ID-ului termenului (37).

Știu că acesta este un post vechi, dar am vrut să adaug și eu ceva.
@jdm2112 are dreptate. Folosește pur și simplu clasa WP_Query. Acest lucru asigură că, dacă structura bazei de date este actualizată în viitor, interogarea ta va continua să funcționeze... Totuși, din moment ce se pare că cauți un răspuns SQL brut, acesta este SQL-ul pe care WP_Query
l-ar executa... cel puțin începând cu WordPress 5.6. (Am adaptat interogarea SQL la întrebarea ta)
SELECT * from wp_posts
LEFT JOIN
wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE
(wp_term_relationships.term_taxonomy_id IN (37)) AND
wp_posts.post_type = 'recipe_cpt' AND
wp_posts.post_status = 'publish'
GROUP BY wp_posts.ID
Poți obține interogarea efectivă creând o instanță WP_Query
, apoi verificând proprietatea request
astfel:
<?php
$args = [
'post_type' => 'recipe_cpt',
'tax_query' => [
[
'taxonomy' => 'recipe_tx',
'field' => 'term_id',
'terms' => 37
]
]
];
$queryObj = new WP_Query($args);
// Acesta va returna interogarea SQL brută efectivă
$rawSqlQuery = $queryObj->request;
