web-dev-qa-db-ja.com

ACFで作成したカスタムフィールドのすべての値をページに表示する

私は Advanced Custom Fields/ACF を使ってカスタムフィールドを作成しています。それらの1つはいくつかのオプションを表示するチェックボックスのリストです (option1、option2、option3 ...)

このフィールドのすべてのオプションをフロントエンドの別のページに次のように表示します。

オプション:
- オプション1
- オプション2
- オプション3
- ...

ACFからキーを使ってすべてのオプションを取得する方法を教えてください。

9
Bob

get_field_object ACF関数は、特定のフィールドの情報とオプションを取得するために使用できます。

まず、出力したい特定のフィールドのフィールドキーが必要です。フィールドグループを編集するときは、ページ上部の画面オプションタブをクリックしてください。フィールドキーの表示を切り替えるオプションが表示されます(スペースを節約するためにデフォルトでは非表示になっています)。

Field Key

キーを取得したら、フィールドオブジェクトをロードしてその値を出力できます。

$field_key = "field_5039a99716d1d";
$field = get_field_object($field_key);

if( $field )
{
    echo '<select name="' . $field['key'] . '">';
        foreach( $field['choices'] as $k => $v )
        {
            echo '<option value="' . $k . '">' . $v . '</option>';
        }
    echo '</select>';
}
15
Milo

チェックボックスがチェックされている場合に何かを出力しようとしているのなら、

<?php if(in_array('news', get_field('checkbox') )): ?>
    <h1>News was ticked!</h1>
<?php endif; ?>

チェックしたオプションの一覧を表示するだけの場合は、次のようにします。

<p>Categories: <?php get_field('checkbox'); ?></p>

これにより、foreach宣言で管理できる値の配列が得られます。 the_field('checkbox')を使用すると、分割できるオプションのカンマ区切りの文字列が得られます。

また、 ACFのサイト にアクセスしてドキュメントを確認することをお勧めします。このタイプのほとんどの質問はそこそこ詳細に答えられ、開発者は彼のサポートフォーラムでも活発です。

編集:あなたが動的なクエリを生成するためのページに出力される利用可能なオプションのリストが欲しいなら、私はただ事があります。これは昨日(ACFを使用して)特定のカスタムフィールドキーからメタ値のリストを取得するために作成したばかりです。私はあなたのためにそれをかなり一般的にしました。 ajaxリクエストを処理するためのJSの別の塊と、結果の投稿を出力する、かなり複雑なphpの断片があります。書き換えることはできません。JSは標準のWP前向きのAjax呼び出し/応答であり、PHPは12の異なるACFフィールドに対する条件付きチェックの混乱です。再表示(そのうち2つはリピーターです)。基本はこのコードです。ボタンonClickは別のJSファイルでajax関数を呼び出し、ajax関数自体のphpは基本的にクエリの引数の配列を設定します。そのうちの1つはmeta_valueとして$selectedOptionまたは$_POST['option']です。それはnew WP_Query( $args );に渡され、それがループで使われ、その出力はadd_action('wp_ajax_the_ajax_hook', 'fetch_option_list');add_action( 'wp_ajax_nopriv_the_ajax_hook', 'fetch_option_list' ); //for non logged-in usersを通してjsにフィードバックされます。

 // Get list of meta_values for given meta_key and post_type (page, post, custom post type)
 function meta_list($key = '', $type = '', $status = 'publish'){
 global $wpdb;
    $r = $wpdb->get_col($wpdb->prepare( "
    SELECT DISTINCT pm.meta_value FROM {$wpdb->postmeta} pm
    LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
    WHERE pm.meta_key = '%s'
    AND p.post_status = '%s'
    AND p.post_type = '%s'
    ORDER BY pm.meta_value ASC", $key, $status, $type));
    return $r;
}

 // ADD EG A FORM TO THE PAGE
 function meta_ajax_frontend(){
    $formlist = meta_list('metakey', 'posttype');
    echo '<form id="optionSelect">';
    echo '<select id="optionList" name="optionList">';
    foreach($formlist as $fl => $val) {
        echo '<option>' . $val . '</option>';
    }
    echo '</select>';
    echo '<input name="action" type="hidden" value="the_ajax_hook" />
    <input id="submit_button" value = "Search" type="button" onClick="fetch_meta();" />
    </form>
    <div id="meta_list">
    Please select an option from the list
    </div>';
 }
0
SickHippie