web-dev-qa-db-ja.com

WordPressのカスタムフィールド(複数の値を持つチェックボックス)

現在、カスタム投稿タイプを使用しています。カスタムフィールドはチェックボックスです。チェックボックスには、ラップトップ、新規、マーケティングテキストなしなど、複数の値があります。 No-marketing-textが選択された唯一のものである場合、それが私がやりたいことをしても問題はありません。複数のチェックボックスが選択されている場合は、最初に選択されているものだけが確認されます。複数のチェックボックスが選択されている場合でも機能させるためにはどうすればいいですか?

<?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

前提条件では、データベースエントリは正しく保存され、検索時にのみ問題が発生します。

複数のボックスが選択されている場合、値はシリアル化された配列としてデータベースに存在するはずです
幸いなことに、 get_post_meta はそれらをシリアライズ解除しますが、それでも配列です。
したがって、あなたの条件は次のように修正する必要があります。

$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