web-dev-qa-db-fra.com

WordPress Custom Fields (cases à cocher avec plusieurs valeurs)

J'utilise actuellement un type d'article personnalisé, avec un champ personnalisé qui est une case à cocher. La case à cocher contient plusieurs valeurs, notamment: Ordinateur portable, Nouveau, Texte non marketing et plusieurs autres. Si No-marketing-text est le seul sélectionné, cela ne pose pas de problème de faire ce que je veux. Si plusieurs cases à cocher sont sélectionnées, seul le premier sélectionné est affiché. Que dois-je changer pour que cela fonctionne même si plusieurs cases sont cochées?

<?php

      //REMOVES BACK TO TOP BUTTON FOR PROGRAMS THAT HAVE NO MARKETING BLURB - JUNE 27, 2013 - Brandon Carson

    if("No-marketing-text" == get_post_meta($post->ID, 'program_flags', true)){

            echo "";

        }else{
            echo "<div class='content-block'>";

            the_content();

        echo "<a class='back-to-top-link' href='#top'>Back to Top</a></div>";


        }

    ?>
1
Brandon

En vertu du principe , vos entrées de base de données sont correctement enregistrées et votre problème ne survient que lors de l'extraction:

Si plusieurs boîtes ont été sélectionnées, les valeurs doivent vivre dans la base de données sous forme de tableaux sérialisés.
Heureusement, get_post_meta les désérialise pour nous, mais ce sont toujours des tableaux.
Par conséquent, votre conditionnel devrait être modifié comme suit:

$program_flags = get_post_meta( $post->ID, 'program_flags', true );

if(
    'No-marketing-text' === $program_flags
    ||
    ( is_array( $program_flags ) && in_array( 'No-marketing-text', $program_flags ) )
){
    // do your thing
}
1
Johannes Pille