ACF로 작성된 사용자 정의 필드의 모든 값을 페이지에 표시


9

내가 사용하고 고급 사용자 정의 필드 / ACF를 사용자 정의 필드를 만들 수 있습니다. 그중 하나는 일부 옵션 (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가 활성화 된 다른 WordPress 인스턴스에서 테스트해야한다면, 환경 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를 사용하여 주어진 사용자 정의 필드 키에서 메타 값 목록을 가져 오기 위해 어제 방금 작성한 조각입니다. 나는 그것을 당신에게 상당히 일반적으로 만들었습니다. 아약스 요청을 처리하기위한 또 다른 JS 덩어리와 결과 게시물을 출력하는 다소 복잡한 PHP 조각이 있습니다. JS를 다시 작성할 수는 없습니다. JS는 표준 WP 순방향 아약스 호출 / 응답이며, PHP는 우리가 표시하는 12 개의 서로 다른 ACF 필드 (2 개는 리피터)에 대한 조건부 검사의 혼란입니다. 기본은이 코드입니다. 버튼 onClick은 별도의 JS 파일에서 ajax 함수를 호출하며 ajax 함수 자체의 PHP는 본질적으로 쿼리에 대한 인수 배열을 설정합니다.$selectedOption또는 $_POST['option']meta_value로. 그것은로 피드되고 new WP_Query( $args );, 루프에서 사용되며, 그 출력은 add_action('wp_ajax_the_ajax_hook', 'fetch_option_list');and 를 통해 js로 피드백됩니다 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>';
 }

음, 내가 이것을하면 "포스트"에 할당 된 옵션을 출력 할 것입니다. 필요한 것은 "페이지"의 모든 옵션을 전체 옵션 목록으로 표시하는 것입니다.
Bob

프론트 엔드에 백엔드의 옵션 목록이 필요한 이유가 궁금합니다. 선택한 관리자에서 선택한 항목이있는 옵션 목록 만 표시 하시겠습니까? 사용자가 확인 된 데이터를 변경할 수 있도록 양식의 일부로 이것을 사용하려는 경우 올바른 플러그인이나 방법이 아닙니다. 그러나 옵션 목록을 사용하여 쿼리를 다시 작성하기위한 사전 필터로 사용하려면 원하는 것이있을 수 있습니다. 여기에서 해당 코드로 위의 게시물을 편집하겠습니다.
SickHippie

안녕하세요 다른 밥과 함께 밥 메신저, 나는 그들과 일종의 "메뉴"를 만들려면 백엔드의 옵션이 필요합니다. 귀하의 코드가 게시물과 게시물에 지정된 옵션을 검색한다고 생각합니다. 게시물을 만들 때 백엔드에 나타나는 옵션 목록 만 필요합니다. 내가 무언가를 알아낼 수 있는지 확인하기 위해 코드로 계속 작업 할 것입니다. 감사합니다 @SickHippie
Dunning-Kruger

아니요, 해당 확인란에서 선택한 옵션 목록을 가져옵니다. 즉, "여기에는 확인란이 있습니다. 값이 '옵션 1', '옵션 2', '옵션 4'인 게시물이 있습니다. 문자 그대로 해당 meta_key를 기반으로 meta_value 목록을 가져옵니다. 동적 목록에 필요하지만 임시 게시물을 만들면 모든 확인란이 선택되어 모든 옵션을 배열로 가져옵니다. 내가 사용하고 있습니다 foreach.을 통해 아약스를 통해 게시물의 목록을 가져 후자의 기능을 루프를,하지만 난 그 장면을 떠났습니다.
SickHippie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.