it-swarm-vi.com

Hiển thị tất cả các giá trị của trường tùy chỉnh được tạo bằng ACF trên một trang

Tôi đang sử dụng Trường tùy chỉnh nâng cao/ACF để tạo trường tùy chỉnh. Một trong số đó là danh sách các hộp kiểm hiển thị một số tùy chọn (tùy chọn1, tùy chọn2, tùy chọn3 ...) .

Bây giờ tôi muốn hiển thị tất cả các tùy chọn của trường này trên một trang riêng trên frontend như vậy:

Tùy chọn:
- lựa chọn 1
- Lựa chọn 2
[.__.] - tùy chọn 3
[.__.] - ...

Làm cách nào tôi có thể truy xuất tất cả các tùy chọn với các khóa từ ACF?

9
Bob

Hàm get_field_object ACF có thể được sử dụng để nhận thông tin và tùy chọn cho một trường cụ thể.

Trước tiên, bạn cần khóa trường của trường cụ thể mà bạn muốn xuất. Khi chỉnh sửa một nhóm trường, nhấp vào tab tùy chọn màn hình ở đầu trang. Bạn sẽ thấy một tùy chọn để chuyển đổi hiển thị của khóa trường (nó được ẩn theo mặc định để tiết kiệm dung lượng):

Field Key

Khi bạn có khóa, bạn có thể tải đối tượng trường và xuất giá trị của nó:

$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

Nếu bạn đang cố xuất ra thứ gì đó nếu hộp kiểm được chọn, hãy sử dụng:

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

Nếu bạn đang cố gắng chỉ hiển thị danh sách các tùy chọn đã chọn, hãy sử dụng:

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

Điều này sẽ cung cấp cho bạn một loạt các giá trị mà bạn có thể quản lý bằng khai báo foreach. Sử dụng the_field('checkbox') sẽ cung cấp cho bạn một chuỗi các tùy chọn được phân tách bằng dấu phẩy.

Tôi cũng sẽ đề nghị bạn truy cập trang web của ACF và xem qua tài liệu. Hầu hết các câu hỏi thuộc loại này sẽ được trả lời ở đó một cách chi tiết và nhà phát triển cũng đang hoạt động trong các diễn đàn hỗ trợ của mình.

EDIT: Nếu bạn muốn danh sách các tùy chọn có sẵn xuất vào một trang để tạo truy vấn động, tôi chỉ có một điều. Đây là một phần tôi mới xây dựng ngày hôm qua để lấy danh sách các giá trị meta từ khóa trường tùy chỉnh đã cho (sử dụng ACF). Tôi đã làm cho nó khá chung chung cho bạn. Có một đoạn mã JS khác để xử lý yêu cầu ajax và một đoạn php khá phức tạp tạo ra các bài đăng kết quả. Tôi thực sự không thể viết lại những thứ đó - JS là tiêu chuẩn WP cuộc gọi/phản hồi ajax hướng về phía trước và PHP là một mớ hỗn độn kiểm tra có điều kiện cho 12 trường ACF khác nhau mà chúng tôi ' hiển thị lại (2 trong số đó là bộ lặp). Điều cơ bản là mã này ở đây, nút onClick gọi hàm ajax trong một tệp JS riêng biệt và php cho hàm ajax về cơ bản thiết lập một mảng các đối số cho truy vấn, một trong số đó là $selectedOption hoặc $_POST['option'] là meta_value. Điều đó được đưa đến một new WP_Query( $args );, sau đó được sử dụng trong một vòng lặp, đầu ra của nó được đưa trở lại js thông qua 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>';
 }
0
SickHippie