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


9

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:
- tùy chọn 1
- tùy 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?


Xin nói rõ hơn một chút về chính xác những gì bạn đang cố gắng đạt được. ACF được xây dựng để hiển thị đầu ra của các trường tùy chỉnh trên frontend, không cho phép nhập frontend.
SickHippie

Câu trả lời:


16

Hàm get_field_objectACF có thể được sử dụng để lấy 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):

Khóa trường

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

Sẽ thật tuyệt nếu chúng ta có thể tham chiếu tên, dễ dàng như sử dụng khóa. Bằng cách này, nếu có cái này trong một plugin và cần phải thử nó trên một phiên bản khác của WordPress với acf được bật, bạn không phải tìm kiếm khóa và thay đổi lại chỉ vì trong môi trường của bạn B.
klewis

0

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 một foreachkhai báo. Việc 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 đề nghị bạn vào trang 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à tác phẩm 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 điều đó - JS là cuộc gọi / phản hồi ajax hướng tới WP tiêu chuẩn 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 đang hiển thị (2 trong số đó là các bộ lặp). Điều cơ bản là mã này ở đây, nút onClickgọi hàm ajax trong một tệp JS riêng và php cho chính hàm ajax thiết lập một mảng các đối số cho truy vấn,$selectedOptionhoặc $_POST['option']như 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>';
 }

Mm, nếu tôi làm điều này, tôi sẽ xuất các tùy chọn được gán cho "bài đăng", điều tôi cần là hiển thị tất cả các tùy chọn trong một "trang" dưới dạng một danh sách đầy đủ các tùy chọn.
Bob

Tôi tò mò về lý do tại sao bạn cần danh sách tùy chọn của phụ trợ hiển thị trên frontend. Bạn có muốn chỉ hiển thị danh sách tùy chọn với các mục được chọn trong quản trị viên đã chọn không? Nếu bạn đang cố gắng sử dụng điều này như một phần của biểu mẫu (cho phép người dùng thay đổi dữ liệu đã kiểm tra), thì đây không phải là plugin hoặc phương pháp phù hợp để làm như vậy. Tuy nhiên, nếu bạn muốn danh sách tùy chọn sử dụng làm bộ lọc trước để viết lại truy vấn, tôi có thể chỉ có điều cho bạn. Tôi sẽ chỉnh sửa bài viết trên của tôi với mã đó ở đây trong thời gian ngắn.
SickHippie

Xin chào Bob với một acc khác, tôi cần các tùy chọn của phụ trợ để tạo một loại "menu" với chúng. Tôi nghĩ rằng mã của bạn lấy các bài đăng và các tùy chọn được gán cho chúng. Tôi chỉ cần danh sách các tùy chọn giống như tùy chọn xuất hiện trên phụ trợ khi bạn tạo một bài đăng. Tôi sẽ tiếp tục làm việc với mã của bạn để xem liệu tôi có thể tìm ra điều gì không. Cảm ơn @SickHippie
Dunning-Kruger

Không, nó lấy danh sách các tùy chọn đã được chọn từ hộp kiểm đó - nghĩa là "đây là hộp kiểm, có những bài đăng đã được gán các giá trị 'tùy chọn 1', 'tùy chọn 2', 'tùy chọn 4' và v.v. Nó thực sự chỉ cần kéo danh sách meta_value dựa trên meta_key đó. Tôi cần nó cho một danh sách động, nhưng nếu bạn tạo một bài đăng nháp thì tất cả các hộp kiểm sẽ được chọn, nó sẽ kéo tất cả các tùy chọn ra trong một mảng cho bạn. Tôi đang sử dụng foreachđể lặp qua. Các chức năng sau này đưa danh sách các bài đăng qua ajax, nhưng tôi đã bỏ qua phần đó.
SickHippie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.