web-dev-qa-db-fra.com

Douane WP Requête de meta_value stockée sous forme de tableau sérialisé

J'utilise un multicheck Magic Fields 2 pour stocker des services pouvant être attribués à des études de cas. Les données sont stockées sous forme de tableau sérialisé dans WordPress. J'ai besoin d'aide pour extraire les "publications connexes".

Je sais que vous ne pouvez pas simplement utiliser le tableau en tant que meta_value (WordPress ne le prend tout simplement pas en charge). Je dois donc utiliser plusieurs boucles ou ajouter du code personnalisé dans la boucle.

C'est le code que j'ai jusqu'à présent:

<?php
$related_case_study_args = array(
    'post_type' => 'case-studies',
    'posts_per_page' => '-1',       // get all posts
);

$related_case_study_loop = new WP_Query($related_case_study_args);

if ( $related_case_study_loop->have_posts() ) : 

?>

<p>See Related Case Studies:</p>

<?php

while ( $related_case_study_loop->have_posts() ) : $related_case_study_loop->the_post();

?>

    <p class="related"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>

<?php

endwhile; endif;
wp_reset_query();

?>

qui fonctionne bien et tire dans chacune des études de cas. Dans chaque étude de cas, il existe des services individuels sur lesquels filtrer. Comment puis-je obtenir la méta_valeur, l'extraire et afficher uniquement les entrées liées?

J'ai essayé d'utiliser ce code dans l'instruction "while" simplement pour voir si les données sont renvoyées correctement, mais sans succès:

// returns an array as this is a multicheck field in Magic Fields 2
$services = get_post_meta($post->ID, 'services', true);

// foreach item in the array
foreach ($services as $service) {
    if ( sanitize_title($service_title) == sanitize_title($service) ) {
        echo '<p>' . esc_attr($service) . '</p>';

    }
}

Toute aide ici serait appréciée!

Merci beaucoup,

James

2
James Morrison

Si vous êtes dans la boucle while, utilisez get_the_ID ().

// returns an array as this is a multicheck field in Magic Fields 2
if(get_post_meta(get_the_ID(), 'services', true)){
    $services = get_post_meta(get_the_ID(), 'services', true);
    $services = maybe_unserialize($services);
    // foreach item in the array
    foreach ($services as $service) {
        if ( sanitize_title($service_title) == sanitize_title($service) ) {
            echo '<p>' . esc_attr($service) . '</p>';
        }
    }
} else {
    //No services set
}

Vérifie ça. Btw, vous pouvez définir un tableau comme une valeur de champ méta (mais via un code utilisant add_post_meta, pas la boîte à méta via post sur l'écran d'édition post).

1
Rutwick Gangurde