web-dev-qa-db-fra.com

Obtenir tous les messages là où custom_field est comme valeur

J'essaie de faire une recherche de style MySQL avec les fonctions intégrées de Wordpress pour récupérer les articles. Il existe probablement un moyen simple de le faire et je suis probablement un peu en retrait de la solution.

Nous avons des publications avec des champs personnalisés. Il s'agit de données héritées importées sous forme de type de publication personnalisée, les champs custom_field étant les données supplémentaires de notre base de données ancienne. Les champs personnalisés sont configurés comme suit pour chaque publication dans Wordpress dès maintenant:

key = subject
val = Subject One, Subject Two, Subject Three

J'essaie d'extraire toutes les publications où la valeur custom_field est LIKE "Subject Two", à titre d'exemple. Il existe probablement un moyen facile de faire cela qui ne m’a pas encore frappé. Merci de votre aide!

J'ai déjà une requête MySQL qui fonctionne correctement. Je voulais juste utiliser les fonctions de Wordpress pour gérer la requête au lieu de devoir le faire manuellement pour cette vue de thème. Voici l'exemple de travail:

// Get posts that match LIKE this subject
$cft_by_subject = $wpdb->get_results(
    "SELECT
        wp_posts.ID,
        wp_posts.post_title,
        wp_posts.post_date,
        wp_posts.post_name,
        wp_postmeta.meta_value
     FROM
        wp_posts,
        wp_postmeta
     WHERE
        (wp_posts.ID = wp_postmeta.post_id) AND
        (wp_posts.post_type = 'our-custom-post-type') AND
        (wp_posts.post_status = 'Publish') AND
        (wp_postmeta.meta_key = 'subject') AND
        (wp_postmeta.meta_value LIKE '%".$this-is-our-subject."%')
     ORDER BY
        wp_posts.ID ASC
    ",
    ARRAY_A
);
2
Will Ashworth

Vous pouvez utiliser meta_query dans WP_Query

$args = array(
    'post_type' => 'post',
    'meta_query' => array(
        array(
            'key' => 'subject',
            'value' => 'Subject Two',
            'compare' => 'LIKE'
        )
    )
 );
$query = new WP_Query( $args );
2
Brady