额外的TinyMCE编辑器去除<p>和<br>标记?

时间:2011-04-22 作者:Pippin

嘿,伙计们,我给一些文本区域添加了一个TinyMCE,这些文本区域显示在自定义元框中。除了编辑器不会保存之外,所有格式都可以很好地工作<p><br/> 标签。它不会保留换行符。

TinyMCE的设置如下:

wp_tiny_mce(true, array(\'editor_selector\' => $field[\'class\'] ) );

\'<textarea name="\', $field[\'id\'], \'" class="\', $field[\'class\'], \'" id="\', $field[\'id\'], \'" cols="60" rows="8" style="width:97%">\', $meta ? esc_html($meta) : $field[\'std\'], \'</textarea>\';
这一切都很好。除了<P><BR> 标签。

我不确定编辑器是在保存post meta之前还是之后删除它们。

想法?

7 个回复
最合适的回答,由SO网友:Arthur Carabott 整理而成

我最近才开始工作。您应该搜索并替换metaname 使用您的元框名称。

保持格式的关键是使用wpautop(); 保存数据时。

add_action( \'add_meta_boxes\', \'add_metaname_box\');

add_action( \'save_post\', \'metaname_save\');

function add_metaname_box() {
    add_meta_box(
        \'metaname_id\',
        __( \'metaname text\', \'metaname_textdomain\'),
        \'metaname_custom_box\',
        \'page\'
    );
}

function metaname_custom_box() {
    global $post;
    wp_nonce_field( plugin_basename( __FILE__ ), \'metaname_noncename\' );
    $data = get_post_meta($post->ID, \'metaname_custom_box\', true);
    echo <<<EOT
    <script type="text/javascript">
jQuery(document).ready(function() {
    jQuery("#metaname_custom_box").addClass("mceEditor");
    if ( typeof( tinyMCE ) == "object" &&
         typeof( tinyMCE.execCommand ) == "function" ) {
        tinyMCE.execCommand("mceAddControl", false, "metaname_custom_box");
    }
});
</script>
    <textarea id="metaname_custom_box" name="metaname_custom_box">$data</textarea>
EOT;
}

function metaname_save($post_id) {
    global $post;

    // Verify
     if ( !wp_verify_nonce( $_POST[\'metaname_noncename\'], plugin_basename(__FILE__) )) {
         return $post_id;
     }
     if ( \'page\' == $_POST[\'post_type\'] ) {
         if ( !current_user_can( \'edit_page\', $post_id ))
             return $post_id;
     } else {
         if ( !current_user_can( \'edit_post\', $post_id ))
             return $post_id;
     }

     $key = \'metaname_custom_box\';
    $data = wpautop($_POST[$key]);

     // New, Update, and Delete
     if(get_post_meta($post_id, $key) == "") 
         add_post_meta($post_id, $key, $data, true);
     elseif($data != get_post_meta($post_id, $key, true))
         update_post_meta($post_id, $key, $data); 
     elseif($data == "")
         delete_post_meta($post_id, $key, get_post_meta($post_id, $key, true));        
}

SO网友:Chip Bennett

下面是我用来自定义配置TinyMCE的(精简版):

// http://tinymce.moxiecode.com/wiki.php/Configuration
function cbnet_tinymce_config( $init ) {

    // Don\'t remove line breaks
    $init[\'remove_linebreaks\'] = false; 

    // Pass $init back to WordPress
    return $init;
}
add_filter(\'tiny_mce_before_init\', \'cbnet_tinymce_config\');
我想你已经试过了?

编辑:

您可能需要包括一些其他配置更改,例如:

// Convert newline characters to BR tags
$init[\'convert_newlines_to_brs\'] = true; 
// Do not remove redundant BR tags
$init[\'remove_redundant_brs\'] = false;
玩转TinyMCE configuration parameters, 找到你需要改变的。

SO网友:Nathan Crause

在随后的Wordpress版本中,这似乎有了一些变化。您现在可以禁用此功能:

add_filter(\'tiny_mce_before_init\', function($init) {
    $init[\'wpautop\'] = false;
    return $init;
}

SO网友:patricksayshi

找到了一个更简单的解决方法:

在实际模板上,更改以下内容:

<?php echo get_the_content());?>
对此:

<?php echo wpautop(get_the_content());?>
通过这种方式,wpautop()可以逐个模板添加TinyMCE剥离的标记。

SO网友:Sisir

为什么不使用wordpress新功能wp_editor 要渲染tinymce。这样一切都会得到处理。当您向用户显示内容时,应用过滤器the_content.

像这样:

$meta = "content of the metabox";
echo apply_filters(\'the_content\', $meta);
过滤器the_content 将自动将链接制动器转换为<br><p>.

SO网友:Tapefreak

另一个简单的解决方案:使用短代码!

将此代码放入函数中。php并在内容编辑器中使用[br]——HTML或visual——无论您想在哪里显示br标记。

add_shortcode("br", "br_tag");

function br_tag(){
    return("<br/>");                            

}

SO网友:ClaudioC

这是为那些使用wordpress元盒的人准备的:插件名称:Meta-box插件URI:deluxeblogtips com/Meta-box

我已经修改了/供应商/元框/inc/字段/所见即所得。静态函数中的php:

static function html( $html, $meta, $field )

//just after the else i have added :
$meta = html_entity_decode($meta); // 
//and solve the problem ;)
--但更好的解决方案是--

将其放入函数中。php,它从元盒插件调用过滤器:

function meta_wysiwyg_antes_save($meta)
{   
    $meta = html_entity_decode($meta);
    return $meta;
}
add_filter("rwmb_(ID-OF-METABOX-FIELD)_meta", "meta_wysiwyg_antes_save"); //en meta-box.php 194

结束

相关推荐

无需大量重写即可复制_EDITOR(媒体栏、TinyMCE、可视/HTML选项卡)功能

关于在post/page/cpt编辑器之外实现\\u编辑器功能,并在不重写大量内容的情况下保留该功能的外观和感觉,我一直在苦苦思索一段时间。我遇到的问题都是WP核心中的问题。\\u编辑器及其周围的JS脚本可以拉入TinyMCE,处理视觉/HTML选项卡,以及媒体栏,这些脚本不会被多次使用。此外,\\u编辑器不是自包含的,这意味着您必须在页眉/页脚中加载许多样式和脚本才能启用功能。我的问题是,是否有人看到或构建了一个自包含的编辑器函数,该函数标准化了插件使用的类编辑器实现?我雇佣了一名开发人员来编写脚本,他