web-dev-qa-db-fra.com

Utilisation de WP_Query pour saisir des méta-valeurs personnalisées, objet foreach vers json

J'ai donc 4 boîtes à méta personnalisées pour chaque message posté sur un site wordpress relatif au produit vendu par ce client.

J'ai 3 listes déroulantes, une pour la catégorie et deux pour deux des boîtes méta personnalisées. Les méta-boîtes que je traite sont adhesion_box et substrate_box.

Mon script AJAX fonctionne correctement lorsque j'interroge les titres des publications, mais lorsque j'essaie de saisir les méta-valeurs, cela ne fonctionne pas. J'essaie d'utiliser WP_Query pour cela au lieu de $wpdb. Voici le bit php qui ne fonctionne pas:

$cat   = $post['cat'];
$query = new WP_Query( array( 'cat' => '$cat' ) );

if($query->have_posts()){
    $posts = $query->get_posts();
    foreach( $posts as $post ) {
        $return[$post->id] = $post->meta_value;
    }
}

Actuellement, l'objet JSON qu'il renvoie est le suivant:

OBJECT: {"":""}

Donc je suis un peu perdu. Voici la longue requête $ wpdb que mon ami a écrite et qui saisit les titres des publications par catégorie. Cela fonctionne parfaitement, mais j’ai besoin de la méta-valeur adhesion_box, et non du titre de la publication.

$query = $wpdb->get_results(
    "SELECT p.`id`,p.`post_title`
    FROM $wpdb->posts `p`
    JOIN $wpdb->term_relationships `tr` ON (`p`.`ID` = `tr`.`object_id`)
    JOIN $wpdb->term_taxonomy `tt` ON (`tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`)
    JOIN $wpdb->terms `t` ON (`tt`.`term_id` = `t`.`term_id`)
    WHERE `p`.`post_type`='post'
    AND `p`.`post_status` = 'publish'
    AND `tt`.`taxonomy` = 'category'
    AND `t`.`term_id` = '$cat'");

J'ai de la difficulté à comprendre comment saisir cette valeur et le faire de la manière la plus simple.

Toute aide appréciée.

Voici la démo, vous pouvez donc la voir .

1
Remy Sheppard

La meilleure façon de s'y prendre est d'utiliser $wpdb. La requête pour extraire meta_value par catégorie est la suivante:

$query = $wpdb->get_results(
    "SELECT p.`ID`, pm.`meta_value` FROM {$wpdb->postmeta} pm
    LEFT JOIN {$wpdb->posts} `p` ON `p`.`ID` = pm.`post_id`
    LEFT JOIN {$wpdb->term_relationships} `tr` ON `p`.`ID` = `tr`.`object_id`
    LEFT JOIN {$wpdb->term_taxonomy} `tt` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
    WHERE `pm`.`meta_key` = 'adhesion_box'
    AND `p`.`post_status` = 'publish'
    AND `p`.`post_type` = 'post'
    AND `tt`.`taxonomy` = 'category'
    AND `tt`.`term_id` = $cat
");
0
Remy Sheppard