ออมทรัพย์เงื่อนไขอนุกรมวิธาน


16

ฉันมีปัญหาที่น่าสนใจซึ่งฉันหวังว่าบางคนสามารถตอบได้อย่างรวดเร็ว

ฉันสร้าง metabox ของตัวเองซึ่งขึ้นอยู่กับ "รหัส METABOX ของฉัน" (รายการด้านล่าง) แสดงรายการแบบเลื่อนลงของคำศัพท์ทั้งหมดของฉันภายใน taxonomy "event_types" ที่ฉันสร้างขึ้น

ที่ฉันกำลังประสบปัญหาจะสามารถบันทึก / ปรับปรุงคำที่เกี่ยวข้องกับการโพสต์เมื่อเลือกคำที่แตกต่างจากแบบเลื่อนลงและการปรับปรุงโพสต์

หลังจากทำการแก้ไขด้วยบิตโค้ดต่าง ๆ ฉันสามารถคิดได้ว่าโดยการป้อนหมายเลข term_ID [คั่นด้วยเครื่องหมายจุลภาค] ด้วยตนเองลงในพื้นที่อาร์เรย์ที่ฉันได้รับผลลัพธ์ที่ฉันกำลังมองหา

ตัวอย่างเช่นหากในการบันทึกการโพสต์ฟังก์ชั่นคือการเรียกรหัสนี้

wp_set_post_terms( $post_id, array(5,7), 'event_types', FALSE);

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

ฉันสามารถที่จะเข้าใจได้ว่าถ้าฉันเพิ่มรหัสต่อไปนี้ลงในไฟล์ metabox ของฉันฉันก็สามารถที่จะแสดงรายการรหัสคำศัพท์ที่กำหนด แต่รายการสุดท้ายมีเครื่องหมายจุลภาค

<?php $event_types = wp_get_object_terms($post->ID, 'event_types'); 
foreach ($event_types as $event_type) { echo $event_type->term_id . ','; } ?>

ดังนั้น ... ดูเหมือนว่าฉันจะแก้ปัญหาได้ 85% แล้ว ปัญหา 15% ที่เหลืออยู่ของฉันยังคงเป็นดังนี้:

  1. ฉันต้องเพิ่มอะไรในรหัสไฟล์ functions.php ของฉัน (ด้านล่าง) เพื่อที่ว่าเมื่อฉันสร้าง / อัพเดทโพสต์ค่าใหม่ที่เลือกจากรายการแบบหล่นลง taxonomy ของฉันจะถูกส่งไปยังอาร์เรย์?

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

ขอบคุณพวกคุณมากล่วงหน้า - ด้านล่างเป็นรหัสที่ฉันใช้อยู่ในแต่ละไฟล์

รหัสใน FUNCTIONS.PHP ไฟล์ของฉัน

function save_event_taxonomy_terms($meta, $post_id) {
        $event_types = wp_get_object_terms($post->ID, 'event_types'); 
        wp_set_post_terms( $post_id, array($names), 'event_types', FALSE);
    }

รหัส METABOX ของฉัน

<select name='post_event_types' id='post_event-types'>
// DISPLAY TERMS AS DROP DOWN OPTIONS
    <?php 
    $names = wp_get_object_terms($post->ID, 'event_types'); 
    $event_types = get_terms('event_types', 'hide_empty=0'); 
    ?>
    <option class='event_type-option' value='' <?php if (!count($names)) echo "selected";?>>Not Assigned</option>
    <?php foreach ($event_types as $event_type) {
        if (!is_wp_error($names) && !empty($names) && !strcmp($event_type->slug, $names[0]->slug)) 
        echo "<option class='event_type-option' value='" . $event_type->slug . "' selected>" . $event_type->name . "</option>\n"; 
        else
        echo "<option class='event_type-option' value='" . $event_type->slug . "'>" . $event_type->name . "</option>\n"; 
    }
    ?>
</select>

คำตอบ:


6

ฉันคิดว่าฉันจะโพสต์คำตอบนี้หลังจาก Dimas สามารถช่วยฉันได้

การใช้ WPAlchemey Class ของเขาฉันได้เพิ่ม save_action var ซึ่งมีลักษณะเช่นนี้ (โปรดทราบว่าฉันใช้อนุกรมวิธานสำหรับ "หมวดหมู่" ซึ่งแน่นอนว่าคุณสามารถเปลี่ยนเป็นอนุกรมวิธานที่กำหนดเองของคุณได้):

'save_action'   => 'save_taxonomy_terms',

ฉันเพิ่มฟังก์ชั่นต่อไปนี้สำหรับสิ่งต่อไปนี้:

function save_taxonomy_terms($meta, $post_id) {
wp_set_post_terms($post_id, array($meta['my_terms']), 'category', FALSE);
}

รหัส metabox ของฉันที่แสดงรายการแบบเลื่อนลงของ taxonomies มีลักษณะดังนี้:

<label>Event Category:</label>
    <?php $terms = get_terms('category', 'hide_empty=0'); ?>
    <?php $mb->the_field('my_terms'); ?>
    <select name="<?php $mb->the_name(); ?>">
    <option value='' <?php if (!count($terms)) echo "selected";?>>Not Assigned</option>
    <?php foreach ($terms as $term): ?>
    <option value="<?php echo $term->term_id; ?>"<?php $mb->the_select_state($term->term_id); ?><?php echo '>' . $term->name; ?></option>
    <?php endforeach; ?>
    </select>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.