Obține postări după term id folosind interogări personalizate

20 iun. 2014, 18:23:57
Vizualizări: 129K
Voturi: 21

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

1
Comentarii

Iată Codex-ul la care se referă jdm2112: Afisarea Postărilor Folosind o Interogare Personalizată Select. M-a întrecut...

eyoung100 eyoung100
20 iun. 2014 19:35:42
Toate răspunsurile la întrebare 3
2
46

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

20 iun. 2014 19:32:30
Comentarii

cum pot găsi postări folosind clauza LIKE în acest caz?

Azeem Hassni Azeem Hassni
20 iun. 2014 23:35:08

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

Marian Marian
22 nov. 2017 11:00:59
1

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

3 oct. 2020 12:39:04
Comentarii

Acest lucru este mai bun pentru că este mai rapid decât new WP_Query sau get_posts()

Ivijan Stefan Stipić Ivijan Stefan Stipić
19 iul. 2022 11:11:27
0

Ș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;
11 ian. 2021 08:00:19