แสดงค่าทั้งหมดของฟิลด์ที่กำหนดเองที่สร้างด้วย ACF บนหน้า


9

ฉันใช้Advanced Custom Fields / ACFเพื่อสร้างฟิลด์ที่กำหนดเอง หนึ่งในนั้นคือรายการของช่องทำเครื่องหมายที่แสดงตัวเลือกบาง(OPTION1, option2, option3 ... )

ตอนนี้ฉันต้องการแสดงตัวเลือกทั้งหมดของฟิลด์นี้ในหน้าแยกต่างหากในส่วนหน้าดังนี้:

ตัวเลือก:
- ตัวเลือก 1
- ตัวเลือก 2
- ตัวเลือก 3
- ...

ฉันจะดึงข้อมูลตัวเลือกทั้งหมดด้วยปุ่มจาก ACF ได้อย่างไร


โปรดอธิบายให้ชัดเจนยิ่งขึ้นเกี่ยวกับสิ่งที่คุณพยายามจะทำให้สำเร็จ ACF ถูกสร้างขึ้นเพื่อแสดงเอาต์พุตของฟิลด์ที่กำหนดเองในส่วนหน้าไม่ใช่เพื่ออนุญาตอินพุตส่วนหน้า
SickHippie

คำตอบ:


16

get_field_objectฟังก์ชั่น ACF สามารถใช้ในการได้รับข้อมูลและตัวเลือกสำหรับข้อมูลที่เฉพาะเจาะจง

ก่อนอื่นคุณต้องใช้คีย์ฟิลด์ของฟิลด์เฉพาะที่คุณต้องการส่งออก เมื่อแก้ไขกลุ่มฟิลด์ให้คลิกที่แท็บตัวเลือกหน้าจอที่ด้านบนของหน้า คุณควรเห็นตัวเลือกในการสลับการแสดงผลของคีย์ฟิลด์ (โดยค่าเริ่มต้นจะถูกซ่อนไว้เพื่อประหยัดพื้นที่):

คีย์ฟิลด์

เมื่อคุณมีคีย์คุณสามารถโหลดวัตถุฟิลด์และส่งออกค่าของมัน:

$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) ฉันได้ทำมันค่อนข้างทั่วไปสำหรับคุณ มีอีกอันหนึ่งของ JS สำหรับการจัดการคำขอ ajax และ php ที่ค่อนข้างซับซ้อนซึ่งแสดงผลลัพธ์ของการโพสต์ ฉันไม่สามารถเขียนซ้ำได้ - JS คือการโทร / ตอบกลับ ajax มาตรฐาน WP และ PHP เป็นระเบียบของการตรวจสอบตามเงื่อนไขสำหรับ 12 เขตข้อมูล ACF ที่แตกต่างกันที่เรากำลังแสดงอยู่ พื้นฐานคือโค้ดนี้ที่นี่ปุ่มonClickเรียกใช้ฟังก์ชั่น ajax ในไฟล์ JS แยกต่างหากและ php สำหรับฟังก์ชั่น ajax นั้นตั้งค่าอาร์เรย์ของอาร์กิวเมนต์สำหรับเคียวรีเป็นหลัก$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>';
 }

อืมถ้าฉันทำสิ่งนี้ฉันจะส่งออกตัวเลือกที่กำหนดให้กับ "โพสต์" สิ่งที่ฉันต้องการคือการแสดงตัวเลือกทั้งหมดใน "หน้า" เป็นรายการตัวเลือกทั้งหมด
Bob

ฉันอยากรู้ว่าทำไมคุณต้องมีรายการตัวเลือกของแบ็กเอนด์ที่แสดงในส่วนหน้า คุณต้องการที่จะเพียงแค่แสดงรายการตัวเลือกที่มีรายการที่เลือกในผู้ดูแลระบบที่เลือก? หากคุณกำลังพยายามใช้สิ่งนี้เป็นส่วนหนึ่งของแบบฟอร์ม (อนุญาตให้ผู้ใช้เปลี่ยนแปลงข้อมูลที่ตรวจสอบ) นี่ไม่ใช่ปลั๊กอินหรือวิธีการที่ถูกต้อง อย่างไรก็ตามหากคุณต้องการให้รายการตัวเลือกใช้เป็นตัวกรองล่วงหน้าสำหรับการเขียนแบบสอบถามอีกครั้งฉันอาจจะมีของสำหรับคุณ ฉันจะแก้ไขโพสต์ข้างต้นด้วยรหัสที่นี่ในไม่ช้า
SickHippie

สวัสดีฉันบ๊อบกับ ACC อื่นฉันต้องการตัวเลือกของแบ็กเอนด์เพื่อสร้าง "เมนู" ด้วย ฉันคิดว่ารหัสของคุณรับโพสต์และตัวเลือกที่กำหนดให้ ฉันต้องการรายการตัวเลือกเช่นเดียวกับที่ปรากฏบนแบ็กเอนด์เมื่อคุณสร้างโพสต์ ฉันจะทำงานกับรหัสของคุณต่อไปเพื่อดูว่าฉันสามารถหาข้อมูลได้ไหม ขอบคุณ @SickHippie
Dunning-Kruger

ไม่มันดึงรายการตัวเลือกที่ถูกเลือกจากช่องทำเครื่องหมายนั่นคือมันบอกว่า "นี่คือช่องทำเครื่องหมายมีโพสต์ที่ได้รับการกำหนดค่า 'ตัวเลือก 1', 'ตัวเลือก 2', 'ตัวเลือก 4' มันจะดึงรายการ meta_value ตามตัวอักษรนั้นฉันต้องการมันสำหรับรายการแบบไดนามิก แต่ถ้าคุณสร้างโพสต์ฉบับร่างจะมีการเลือกช่องทำเครื่องหมายทั้งหมดมันจะดึงตัวเลือกทั้งหมดออกมาในอาร์เรย์สำหรับคุณนั่นคืออาร์เรย์ ฉันใช้การforeachวนซ้ำผ่านฟังก์ชั่นในภายหลังนำรายการโพสต์ผ่าน ajax แต่ฉันปล่อยบิตนั้นออกมา
SickHippie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.