问题描述

我正在使用*_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 的结果… 我已经更新了测试代码来显示这个。

最佳解决方案

tinyMCE <textarea> 元素最初被使用的 serialize 函数看不到:

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

您将需要调用 tinyMCE.triggerSave()使其可见。

下面是一个简单的代码段,应该做的诀窍:

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

这在一个外部文件中,以 wp_enqueue_script()入队; 它用于我进行的测试。

次佳解决方案

在您的 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

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。