web-dev-qa-db-fra.com

Interrogez les messages par catégorie ET sur le champ personnalisé, puis ORDERBY un autre champ personnalisé - aide!

OK, j'ai besoin d'interroger les publications en utilisant les critères suivants:

category_name = office, meta_key = vedette_post, meta_value = oui

et ordonne ces résultats en utilisant un deuxième champ personnalisé qui a une valeur numérique

meta_key = prop_order

J'ai la requête suivante qui extrait les publications correctes, mais ne les commande pas par le second champ personnalisé.

<?php $recent = new WP_Query("category_name=office&meta_key=featured_post&meta_value=Yes&posts_per_page=3&orderby=date&order=ASC"); while($recent->have_posts()) : $recent->the_post(); ?>

Cependant, étant donné que j'utilise déjà un champ personnalisé dans la requête, je ne peux pas utiliser orderby = meta_value.

J'ai trouvé la requête SQL suivante sur les forums mais je ne peux pas la faire fonctionner.

    <?php
 global $wpdb;
 global $post;
 $querystr = "
SELECT * FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta AS proporder ON(
$wpdb->posts.ID = proporder.post_id
AND proporder.meta_key = 'prop_order'
)
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.term_id = 3
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->wpostmeta.meta_key = 'featured_post' 
AND $wpdb->wpostmeta.meta_value = 'Yes' 
ORDER BY proporder.meta_value ASC
 ";

 $pageposts = $wpdb->get_results($querystr, OBJECT);

?>

Toute aide serait grandement appréciée!

Merci

Dave

1
daveaspinall

Merci pour votre contribution les gars. Je n'avais pas réalisé que je n'avais jamais posté à ce sujet! Grâce à Ethan et à quelques autres foums, voici le code de travail:

<?php
 global $wpdb;
 global $post;
 $querystr = "
SELECT * FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta AS proporder ON(
$wpdb->posts.ID = proporder.post_id
AND proporder.meta_key = 'prop_order'
)
LEFT JOIN $wpdb->postmeta AS propfeatured ON(
$wpdb->posts.ID = propfeatured.post_id
AND propfeatured.meta_key = 'featured_post'
)
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.term_id = 4
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->posts.post_status = 'publish'
AND propfeatured.meta_value='Yes'
ORDER BY proporder.meta_value ASC
 ";

 $pageposts = $wpdb->get_results($querystr, OBJECT);
 //print_r($querystr);
?>
<?php foreach ($pageposts as $post): ?>
<?php setup_postdata($post); ?>

<!-- some post stuff here -->

<?php endforeach; ?>

où 'prop_order' et 'Featured_post' sont les champs personnalisés et les messages renvoyés qui correspondent à Featured_post = 'Yes' et qui sont ensuite classés par 'prop_order' dans l'ordre ASC.

j'espère que cela t'aides!

1
daveaspinall

J'ai exécuté votre requête sur mon poste de travail local. On dirait qu'il y a une faute de frappe:

Vous devriez avoir $ wpdb-> postmeta.meta_value pas $ wpdb-> postmeta.meta_value (utilisé deux fois).

1
Ethan Seifert