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


9

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

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

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

ACFからキー付きのすべてのオプションを取得するにはどうすればよいですか?


正確に何を達成しようとしているのか、もう少し明確にしてください。ACFは、フロントエンドでカスタムフィールドの出力を表示するために作成されており、フロントエンド入力を許可するためではありません。
SickHippie

回答:


16

get_field_objectACF機能は、特定のフィールドの情報とオプションを取得するために使用することができます。

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

フィールドキー

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

$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>';
}

キーを使用するのと同じくらい簡単に、名前を参照できると便利です。この方法は、プラグインでこれを持っており、これまでにACFを有効にして、あなたがキーを追い詰めるし、という理由だけで、再びそれを変更する必要はありませんワードプレスの別のインスタンス上でそれをテストするために必要な場合は、ご使用の環境Bに
klewis

0

チェックボックスがチェックされている場合に何かを出力しようとしている場合は、次を使用します。

<?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は基本的にクエリの引数の配列を設定します。$selectedOptionまたは$_POST['option']meta_valueとして。それはに供給されますnew WP_Query( $args );、その後、ループに使用される、を介してバックJSに供給されますその出力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

 // 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>';
 }

うーん、これを行うと、「投稿」に割り当てられたオプションを出力します。必要なのは、「ページ」内のすべてのオプションをオプションの完全なリストとして表示することです。
ボブ

フロントエンドにバックエンドのオプションリストを表示する必要がある理由について知りたいです。管理者で選択された項目を含むオプションリストを表示しますか?これをフォームの一部として使用しようとしている場合(ユーザーがチェックされたデータを変更できるようにする場合)、これは適切なプラグインまたはメソッドではありません。ただし、クエリを書き換えるためのプレフィルターとしてオプションリストを使用したい場合は、私はあなたのためだけのものを持っているかもしれません。上記の投稿をそのコードですぐに編集します。
SickHippie 2012年

こんにちはボブ、別のaccです。バックエンドのオプションを使用して、一種の「メニュー」を作成する必要があります。あなたのコードは投稿とそれに割り当てられたオプションを取得すると思います。投稿を作成するときにバックエンドに表示されるようなオプションのリストだけが必要です。私はあなたのコードを使い続けて、何かを理解できるかどうかを確認します。ありがとう@SickHippie
Dunning-Kruger

いいえ、それはそのチェックボックスから選択されたオプションのリストを引き出します-つまり、「ここにチェックボックスがあります。値「オプション1」、「オプション2」、「オプション4」が割り当てられた投稿があります。文字通り、そのmeta_keyに基づいてmeta_valueリストをプルするだけです。動的リストに必要でしたが、ドラフト投稿を作成すると、すべてのチェックボックスが選択され、すべてのオプションが配列から取り出されます。それが配列です。私はforeachtoループスルーを使用しています。
後者の
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.