web-dev-qa-db-fra.com

Meilleure pratique pour plusieurs requêtes sur la page

Sur mon site WordPress, j'ai trois catégories 'moviestar', 'interviews' et 'films'.

Sur une page de catégorie 'moviestar' intitulée 'Angelina Jolie' (et avec une variable personnalisée starname = 'Angelina Jolie'), je souhaite afficher les articles d'autres catégories marqués avec 'Angelina Jolie'.

Mon exemple de page:

Angelina Jolie

(informations de page normales)

Entretiens

requête 1 - Afficher la liste chaînée de tous les articles de la catégorie 'interviews' avec le tag 'Angelina Jolie'

Filmographie

requête 2 - affiche la liste chaînée de tous les articles de la catégorie 'films' étiquetés avec 'Angelina Jolie'

Galerie NextGen

query 3 - affiche toutes les photos dans la galerie NextGen avec le tag 'Angelina Jolie'


Donc mes questions sont:

  1. Comment interroger des publications dans des catégories spécifiques marquées avec Angelina Jolie? Comme ça?

    global $wpdb;
    $yourCategory = '123';
    $yourTag = 'Angelina-Jolie';
    $querystr = "
                SELECT p.* from $wpdb->posts p, $wpdb->terms t, $wpdb->term_taxonomy tt, $wpdb->term_relationships tr, $wpdb->terms t2, $wpdb->term_taxonomy tt2, $wpdb->term_relationships tr2
                WHERE p.id = tr.object_id
                AND t.term_id = tt.term_id
                AND tr.term_taxonomy_id = tt.term_taxonomy_id
                AND p.id = tr2.object_id
                AND t2.term_id = tt2.term_id
                AND tr2.term_taxonomy_id = tt2.term_taxonomy_id
                AND (tt.taxonomy = 'category' AND tt.term_id = t.term_id AND t.slug = '$yourCategory')
                AND (tt2.taxonomy = 'post_tag' AND tt2.term_id = t2.term_id AND t2.slug = '$yourTag')
                ";
    $pageposts = $wpdb->get_results($querystr, OBJECT);
    if ($pageposts):
        foreach ($pageposts as $post):
            setup_postdata($post);
            // do regular WordPress Loop stuff in here
        endforeach;
    else :
        // nothing found
    endif;
    
  2. Comment modifier ce qui précède pour interroger plusieurs catégories et stocker la catégorie dans laquelle se trouve l'article?

  3. Est-il logique que je fasse une requête une fois sur la page, puis utilise une boucle PHP pour répercuter les informations sous chaque en-tête? Quelque chose comme...

    while(($row=mysql_fetch_array($result))&&($row['cat']=='845')){
      echo "<li><a href='".$row['url']."'>". $row['post_title'] . "</a></li>";
    
  4. Serait-il préférable d’abandonner l’utilisation des fonctions et requêtes WordPress et d’interroger directement la base de données à l’aide de php normal?

J'ai vraiment besoin de conseils ou d'un bon exemple. J'utilise Wordpress 3.3.2

J'ai lu ce qui suit, mais je ne comprends pas encore:

http://www.borishoekmeijer.nl/show-related-posts-using-custom-taxonomy/https : //stackoverflow.com/questions/8563136/wordpress-query-filtering-by-custom-field-tag-and-category

2
cheeselover

WP_Query peut traiter tous ces cas. Voir la section sur la gestion de plusieurs taxonomies .

$this_cat = 'interviews';
$this_tag = 'angelina-jolie';

$args = array(
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => $this_cat
        ),
        array(
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => $this_tag
        )
    )
);
$interviews = new WP_Query( $args );

while( $interviews->have_posts() ):
    $interviews->the_post();
    // normal loops stuff
endwhile;
4
Milo