Obtener entradas por ID de término usando consulta personalizada
Quiero recuperar entradas personalizadas usando una consulta personalizada. Mi taxonomía es recipe_tx y términos (Beef), (Chicken) etc en ella.
He intentado usar
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
pero sin éxito.
¿Alguien puede ayudarme a obtener las entradas de WordPress por su term_id?
Si el ID de beef es 37, entonces quiero recuperar todas las entradas
con term_id = 37
Gracias

¿Has probado a usar la clase WP_Query? Quizá te resulte más fácil utilizar las herramientas incorporadas en WordPress en lugar de crear una consulta personalizada desde cero. Algo similar a lo siguiente debería funcionarte:
<?php
$args = array(
'post_type' => 'recipe_cpt', // Tipo de post personalizado para recetas
'tax_query' => array(
array(
'taxonomy' => 'recipe_tx', // Taxonomía personalizada
'field' => 'term_id', // Campo para hacer match (ID del término)
'terms' => 37 // ID específico del término que buscamos
)
)
);
$query = new WP_Query( $args ); ?>
EDITADO: ten en cuenta que tax_query
es un array de arrays por diseño. Muchos problemas con consultas de taxonomías se deben a pasar por alto este detalle.
EDITADO: corregido error tipográfico en el valor field
arriba, reemplazando 'id' por 'term_id'.

Ten en cuenta que los valores posibles para field
son term_id
, name
, slug
o term_taxonomy_id
. Consulta https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

Ya sé que la pregunta está respondida, pero si alguien está intentando lograr lo mismo con una consulta SQL directa, podrías probar lo siguiente:
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
)
La consulta anterior te dará todas las publicaciones que pertenecen a la taxonomía dada (recipe_tx) y al ID de término (37).

Sé que esta es una publicación antigua, pero quería aportar mi opinión.
@jdm2112 tiene razón. Simplemente usa la clase WP_Query. Esto asegura que si la estructura de la base de datos se actualiza en el futuro, tu consulta seguirá funcionando... Sin embargo, como parece que buscas una respuesta en SQL puro, esta es la consulta SQL real que ejecutaría WP_Query
... al menos desde WordPress 5.6. (He adaptado el SQL a tu pregunta)
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
Puedes obtener la consulta real creando una instancia de WP_Query
, luego mirando la propiedad request
así:
<?php
$args = [
'post_type' => 'recipe_cpt',
'tax_query' => [
[
'taxonomy' => 'recipe_tx',
'field' => 'term_id',
'terms' => 37
]
]
];
$queryObj = new WP_Query($args);
// Esto te dará la consulta SQL pura real
$rawSqlQuery = $queryObj->request;
