giá trị văn bản wp_editor không cập nhật


16

Tôi đang sử dụng *_add_form_fieldshành động để thêm các trường vào phân loại tùy chỉnh. Một trong những trường đó là wp_editor ().

Vấn đề tôi gặp phải là khi tôi xuất trình soạn thảo WordPress trên trang như vậy:

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

và sau đó nếu tôi bấm trong trình soạn thảo trên trang và thay đổi giá trị mặc định từ testđể something elsecác $_POST['my_description']biến vẫn thiết lập đểtest

Tôi có nên thêm cài đặt bổ sung vào trình chỉnh sửa của mình không? Có một lý do tại sao tôi không thể thay đổi giá trị của textarea?

BIÊN TẬP

Dưới đây là một trường hợp thử nghiệm rất đơn giản cho thấy điều này xảy ra. Đặt cái này vào tập tin tests.php của bạn và sau đó tạo một thẻ mới . Giá trị được đăng cho 'my_description "sẽ không thay đổi.

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

BIÊN TẬP

Điều này CHỈ xảy ra khi gắn vào hành động "created_term". Nếu bạn đính kèm vào "edit_terms" thì nó hoạt động như mong đợi và tôi nghĩ rằng đây là kết quả của việc ajax được sử dụng trên trang tạo thuật ngữ ... Tôi đã cập nhật mã kiểm tra để hiển thị điều này.


Nó đã thay đổi đối với tôi : 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 ), có thể có gì khác trong mã của bạn có vấn đề?
Rob Vermeer

xem chỉnh sửa thứ hai. Có vẻ như điều này chỉ xảy ra khi bạn "thêm" một thuật ngữ.
Mike

Câu trả lời:


21

<textarea>Phần tử tinyMCE ban đầu không được nhìn thấy bởi hàm serialization được sử dụng:

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

Bạn sẽ cần phải gọi tinyMCE.triggerSave()để làm cho nó hiển thị.

Dưới đây là một đoạn đơn giản nên thực hiện thủ thuật:

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

Điều này trong một tập tin bên ngoài, mê hoặc wp_enqueue_script(); nó đã làm việc cho bài kiểm tra tôi đã tiến hành.


1
Điều này không làm việc cho tôi. Nó xuất hiện dữ liệu được đăng, THÌ mã chức năng nhấp của bạn được kích hoạt.
Mike

bạn đã mê mẩn kịch bản trong đầu? nếu bạn ghi lại nó trong phần chân trang, nó sẽ được tải sau tập lệnh wp và quá muộn.
ungestaltbar

thay vì 'nhấp chuột', bạn thực sự có thể liên kết nó với $ ('# submit'). mousedown (...) :) trong trường hợp đó, nó không quan trọng ở đâu và khi tập lệnh được tải.
ungestaltbar

Làm việc như một bùa nhờ!
nitigyan

4

Trong edited_termschức năng của bạn, bạn cần lưu giá trị và trong add_tag_form_fields bạn cần thay thế testbằng dữ liệu đã lưu.

cái gì đó như:

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

Bây giờ nếu bạn muốn một cách dễ dàng hơn nhiều để thêm các trường bổ sung của tất cả các loại vào thẻ / danh mục hoặc biểu mẫu chỉnh sửa phân loại tùy chỉnh mà không cần phát minh lại bánh xe, hãy xem TAX Meta Class


Xem bình luận thứ hai của tôi, có vẻ như điều này chỉ xảy ra khi thêm một thuật ngữ. Và tôi nghĩ rằng đây là kết quả của việc sử dụng ajax.
Mike

@ Giống như Ajax bạn đang sử dụng Ajax ở đâu?
BaiNET

Khi bạn thêm một danh mục / thuật ngữ mới, WordPress sử dụng ajax để đăng dữ liệu và tạo thuật ngữ mới. Vì một số lý do, điều này không cho phép phần tử wp_editor có giá trị chính xác. Hãy thử mã kiểm tra trong câu hỏi ban đầu.
Mike

1

Theo codex cho wp_editor , đối số đầu tiên phải là nội dung. Vì vậy, thay vì 'kiểm tra', bạn nên đặt $_POST['my_description']nếu đó là những gì bạn muốn nội dung ban đầu.


2
vấn đề không phải là với nội dung hiển thị chính xác. Đó là với biến được đăng giống như nội dung ban đầu ngay cả khi bạn thay đổi nội dung textarea sang một nội dung khác.
Mike
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.