wp_editor nilai teks tidak diperbarui

16

Saya menggunakan *_add_form_fieldstindakan untuk menambahkan bidang ke taksonomi khusus. Salah satu bidang tersebut adalah wp_editor ().

Masalah yang saya hadapi adalah ketika saya menampilkan editor WordPress di halaman seperti ini:

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

dan kemudian jika saya klik di editor pada halaman dan mengubah nilai default dari testke something elsedalam $_POST['my_description']variabel masih diatur ketest

Haruskah saya menambahkan pengaturan tambahan ke editor saya? Apakah ada alasan mengapa saya tidak dapat mengubah nilai textarea?

EDIT

Di bawah ini adalah test case yang sangat sederhana yang menunjukkan ini terjadi. Tempatkan ini di file functions.php Anda dan kemudian buat tag baru . Nilai yang diposting untuk 'my_description "tidak akan berubah.

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();

EDIT

HANYA ini terjadi ketika melampirkan ke tindakan "Created_term". Jika Anda melampirkan ke "edited_terms" berfungsi seperti yang diharapkan dan saya pikir ini adalah hasil dari ajax yang digunakan pada halaman buat istilah ... Saya telah memperbarui kode tes untuk menunjukkan ini.

Mike
sumber
Itu memang berubah untuk saya 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 ):, mungkin ada masalah lain dalam kode Anda?
Rob Vermeer
lihat hasil edit kedua. Tampaknya ini hanya terjadi ketika Anda "menambahkan" suatu istilah.
Mike

Jawaban:

21

<textarea>Elemen tinyMCE awalnya tidak terlihat oleh fungsi serialize yang digunakan:

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

Anda perlu menelepon tinyMCE.triggerSave()untuk membuatnya terlihat.

Di bawah ini adalah cuplikan sederhana yang dapat melakukan trik:

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

Ini dalam file eksternal, enqueued dengan wp_enqueue_script(); itu berhasil untuk tes yang saya lakukan.

ungestaltbar
sumber
1
Ini tidak bekerja untuk saya. Tampaknya data diposting, MAKA kode fungsi klik Anda terpicu.
Mike
apakah Anda membuat skrip di kepala? jika Anda memasukkannya ke dalam footer, itu akan dimuat setelah wp-scripts dan itu sudah terlambat.
ungestaltbar
alih-alih 'klik' Anda sebenarnya dapat mengikatnya ke $ ('# submit'). mousedown (...) :) dalam hal ini seharusnya tidak masalah di mana dan kapan skrip dimuat.
ungestaltbar
Bekerja seperti pesona terima kasih!
nitigyan
4

Di Anda edited_terms fungsi Anda, Anda perlu menyimpan nilai dan dalam Anda, add_tag_form_fields Anda perlu mengganti Anda testdengan data yang disimpan.

sesuatu seperti:

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();

Sekarang jika Anda ingin cara yang jauh lebih mudah untuk menambahkan bidang tambahan dari semua jenis ke tag / kategori Anda atau formulir edit taksonomi khusus tanpa menciptakan kembali roda lihatlah TAX Meta Class

Bainternet
sumber
Lihat komentar kedua saya, sepertinya ini hanya terjadi ketika menambahkan istilah. Dan saya pikir ini adalah hasil dari itu menggunakan ajax.
Mike
@ Seperti apa Ajax di mana Anda menggunakan Ajax?
Bainternet
Ketika Anda menambahkan kategori baru / istilah WordPress menggunakan ajax untuk mengirim data dan membuat istilah baru. Untuk beberapa alasan ini tidak memungkinkan elemen wp_editor memiliki nilai yang benar. Coba kode tes dalam pertanyaan awal.
Mike
1

Menurut codex untuk wp_editor , argumen pertama harus berupa konten. Jadi, alih-alih 'menguji' Anda harus meletakkannya $_POST['my_description']jika itu yang Anda inginkan dari konten awal.

Ractoon
sumber
2
masalahnya bukan pada konten yang muncul dengan benar. Itu dengan variabel yang diposting sama dengan konten asli bahkan jika Anda mengubah konten textarea menjadi sesuatu yang lain.
Mike