Obtener entradas por ID de término usando consulta personalizada

20 jun 2014, 18:23:57
Vistas: 129K
Votos: 21

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

1
Comentarios

Aquí está el Codex al que se refiere jdm2112: Mostrar publicaciones usando una consulta select personalizada. Me ganó de mano...

eyoung100 eyoung100
20 jun 2014 19:35:42
Todas las respuestas a la pregunta 3
2
46

¿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'.

20 jun 2014 19:32:30
Comentarios

¿cómo puedo encontrar posts con la cláusula LIKE en este caso?

Azeem Hassni Azeem Hassni
20 jun 2014 23:35:08

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

Marian Marian
22 nov 2017 11:00:59
1

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).

3 oct 2020 12:39:04
Comentarios

Esto es mejor porque es más rápido que new WP_Query o get_posts()

Ivijan Stefan Stipić Ivijan Stefan Stipić
19 jul 2022 11:11:27
0

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;
11 ene 2021 08:00:19