ค่า wp_editor textarea ไม่ได้อัพเดต


16

ฉันกำลังใช้การ*_add_form_fieldsกระทำเพื่อเพิ่มเขตข้อมูลลงในอนุกรมวิธานที่กำหนดเอง หนึ่งในนั้นคือ wp_editor ()

ปัญหาที่ฉันเผชิญคือเมื่อฉันส่งออกตัวแก้ไข WordPress บนหน้าดังนี้:

wp_editor('test', 'mydescription', array('textarea_name' => 'my_description')); 

แล้วถ้าผมคลิกในการแก้ไขบนหน้าและเปลี่ยนค่าเริ่มต้นจากtestการตัวแปรยังคงตั้งค่าให้something else$_POST['my_description']test

ฉันควรเพิ่มการตั้งค่าเพิ่มเติมในโปรแกรมแก้ไขของฉันหรือไม่ มีเหตุผลที่ฉันไม่สามารถเปลี่ยนค่าของ textarea?

แก้ไข

ด้านล่างเป็นกรณีทดสอบอย่างง่าย ๆ ที่แสดงสิ่งนี้เกิดขึ้น สถานที่แห่งนี้ในแฟ้ม functions.php ของคุณแล้วสร้างใหม่แท็ก ค่าที่โพสต์สำหรับ 'my_description "จะไม่เปลี่ยนแปลง

class Test{

    function __construct() {

        add_action('add_tag_form_fields', array($this, 'add_tag_form_fields'));

        add_action('created_term', array($this, 'created_term'));
    }

    function add_tag_form_fields($tag){

        if ( current_user_can( 'publish_posts' ) ): ?>

        <div class="form-field">
            <?php wp_editor('test', 'mydescription', array('textarea_name' => 'my_description')); ?>
        </div>

        <?php
    }

    function created_term($tag){
        echo '<pre>';
        print_r($_POST);
        echo '</pre>';
            die();
    }
}
new Test();

แก้ไข

สิ่งนี้จะเกิดขึ้นเฉพาะเมื่อแนบกับการกระทำ "created_term" หากคุณแนบกับ "edited_terms" จะทำงานได้ตามที่คาดหวังและฉันคิดว่านี่เป็นผลมาจากการใช้ ajax ในหน้าคำสร้าง ... ฉันได้อัปเดตรหัสทดสอบเพื่อแสดงสิ่งนี้แล้ว


มันเปลี่ยนสำหรับฉัน: Array ( [action] => add-tag [screen] => edit-post_tag [taxonomy] => post_tag [post_type] => post [_wpnonce_add-tag] => 4f7d3df228 [_wp_http_referer] => /wp-admin/edit-tags.php?taxonomy=post_tag [tag-name] => Test99 [slug] => [description] => [my_description] => something else )อาจมีปัญหาอย่างอื่นในรหัสของคุณหรือไม่
Rob Vermeer

ดูการแก้ไขครั้งที่สอง ดูเหมือนว่าสิ่งนี้จะเกิดขึ้นเมื่อคุณ "เพิ่ม" คำเท่านั้น
Mike

คำตอบ:


21

<textarea>องค์ประกอบtinyMCEถูกมองไม่เห็นในตอนแรกโดยฟังก์ชั่นที่ใช้เป็นอันดับ:

$.post(
    ajaxurl,
    $('#addtag').serialize(), function(r) {
        // Content here.
    }
});

คุณจะต้องโทรtinyMCE.triggerSave()เพื่อให้มองเห็นได้

ด้านล่างนี้เป็นตัวอย่างง่ายๆที่ควรทำเคล็ดลับ:

jQuery('#submit').mousedown( function() {
    tinyMCE.triggerSave();
});

นี้ในไฟล์ภายนอกจัดทำด้วยwp_enqueue_script(); มันใช้งานได้สำหรับการทดสอบที่ฉันทำ


1
สิ่งนี้ไม่ได้ผลสำหรับฉัน ดูเหมือนว่าข้อมูลถูกโพสต์จากนั้นรหัสฟังก์ชั่นการคลิกของคุณจะถูกทริกเกอร์
Mike

คุณจัดคิวสคริปต์ไว้ในหัวหรือไม่? หากคุณเข้าคิวไว้ในส่วนท้ายมันจะถูกโหลดหลังจากสคริปต์ WP และนั่นจะสายเกินไป
ungestaltbar

แทนที่จะ 'คลิก' คุณสามารถผูกกับ $ ('# submit'). mousedown (... ) :) ในกรณีนั้นมันไม่สำคัญว่าที่ไหนและเมื่อไรที่สคริปต์ถูกโหลด
ungestaltbar

ทำงานเหมือนมีเสน่ห์ขอบคุณ!
nitigyan

4

ในedited_termsฟังก์ชั่นของคุณคุณจำเป็นต้องบันทึกค่าและในadd_tag_form_fields สิ่งที่คุณต้องการแทนที่testด้วยข้อมูลที่บันทึกไว้

สิ่งที่ต้องการ:

class Test{

    function __construct() {

        //do_action('add_tag_form_fields', $taxonomy);
        add_action('add_tag_form_fields', array($this, 'add_tag_form_fields'));

        //do_action("edited_terms", $term_id, $tt_id, $taxonomy);
        add_action('edited_terms', array($this, 'edited_terms'));
    }

    function add_tag_form_fields($term){

        if ( current_user_can( 'publish_posts' ) ): ?>

        <div class="form-field">
            <?php 
            $saved = get_option('termmeta_'.$term->term_id);
            $saved = (empty($saved))? 'test': $saved;
            wp_editor($saved, 'mydescription', array('textarea_name' => 'my_description')); ?>
        </div>

        <?php
    }

    function edited_terms($term_id){
        if (isset($_POST['mydescription'])){
            update_option('termmeta_'.$term_id,$_POST['mydescription']);
        }
    }
}
new Test();

ตอนนี้ถ้าคุณต้องการวิธีที่ง่ายกว่ามากในการเพิ่มฟิลด์พิเศษทุกประเภทลงในแท็ก / หมวดหมู่ของคุณหรือแบบฟอร์มแก้ไขอนุกรมวิธานที่กำหนดเองโดยไม่ต้องปรับแต่งวงล้อใหม่ TAX Meta Class


เห็นความคิดเห็นที่สองของฉันดูเหมือนว่าสิ่งนี้จะเกิดขึ้นเฉพาะเมื่อเพิ่มคำ และฉันคิดว่านี่เป็นผลมาจากการใช้ ajax
Mike

@ เช่น Ajax ที่คุณใช้ Ajax อยู่ที่ไหน
Bainternet

เมื่อคุณเพิ่มหมวดหมู่ / คำใหม่ WordPress ใช้ Ajax เพื่อโพสต์ข้อมูลและสร้างคำใหม่ ด้วยเหตุผลบางอย่างสิ่งนี้ไม่อนุญาตให้องค์ประกอบ wp_editor มีค่าที่ถูกต้อง ลองใช้รหัสทดสอบในคำถามเดิม
Mike

1

ตาม codex สำหรับwp_editorอาร์กิวเมนต์แรกควรเป็นเนื้อหา ดังนั้นแทนที่จะ 'ทดสอบ' คุณควรใส่$_POST['my_description']ถ้านั่นคือสิ่งที่คุณต้องการเนื้อหาเริ่มต้น


2
ปัญหาไม่ได้อยู่กับเนื้อหาที่แสดงอย่างถูกต้อง มันขึ้นอยู่กับตัวแปรที่โพสต์ว่าเป็นเนื้อหาเดิมแม้ว่าคุณจะเปลี่ยนเนื้อหา textarea เป็นอย่างอื่น
Mike
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.