wp_editor textarea值未更新


16

我正在使用该*_add_form_fields操作将字段添加到自定义分类法中。这些字段之一是wp_editor()。

我面临的问题是,当我在页面上输出WordPress编辑器时,如下所示:

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

然后,如果我单击页面上的编辑器,并将默认值从更改为testsomething 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 2012年

参见第二次编辑。看来这仅在您“添加”术语时发生。
Mike

Answers:


21

<textarea>最初使用的序列化函数看不到tinyMCE元素:

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

您需要致电tinyMCE.triggerSave()使其可见。

下面是一个应做的简单片段:

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

这在外部文件中,以wp_enqueue_script(); 排队;它对我进行的测试有效。


1
这对我不起作用。似乎已发布数据,然后触发了单击功能代码。
迈克

你把剧本排在头了吗?如果将其排入页脚,它将在wp-scripts之后加载,为时已晚。
ungestaltbar 2012年

实际上,您可以将其绑定到$('#submit')。mousedown(...):)而不是'click',在这种情况下,加载脚本的时间和位置都无关紧要。
ungestaltbar 2012年

像魅力一样工作了!
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

@Mike什么Ajax,您在哪里使用Ajax?
Bainternet 2012年

当您添加新的类别/术语时,WordPress使用ajax发布数据并创建新术语。由于某些原因,这不允许wp_editor元素具有正确的值。尝试原始问题中的测试代码。
Mike

1

根据wp_editor的法典,第一个参数应为内容。因此,$_POST['my_description']如果您希望初始内容是“测试”,而不是“测试” 。


2
问题不在于内容正确显示。即使将textarea内容更改为其他内容,发布变量也将与原始内容相同。
Mike
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.