大家好,我已经将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之前或之后删除它们。

想法?

评论

我设法使其以一种方式工作。通过从核心复制功能,并将'remove_linebreaks'=> true更改为'remove_linebreaks'=> false。但是如果我在传递给函数的设置数组中指定'remove_linebreaks'=> false,这将不起作用

@Arthur Carabott是的,那对我也有用。让我们添加到文档的链接:codex.wordpress.org/Function_Reference/wpautop再见!

我们看到了一件很奇怪的事情。手工输入/粘贴的帖子在编辑时保留了休息时间。我们导入的帖子必须由编辑者删除,以免在编辑时出现换行符。

#1 楼

我最近开始工作了。您应该搜索并用元框名称替换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));        
}


评论


如果要插入的meta_key不存在,则update_post_meta也将add_post_meta。

–vmassuchetto
2011-12-9 13:26



#2 楼

这是我用来自定义配置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配置参数,并找到您需要更改的那个。

评论


不,我没有用。如何使用您的函数过滤wp_tiny_mce?

– Pippin
2011年4月27日下午4:06

将代码放在functions.php中。

–芯片Bennett
11年4月27日在13:07

嗯,那不行。

– Pippin
2011年4月27日在14:04

看到我的编辑。您可能没有针对正确的配置参数。

–芯片Bennett
2011-4-27 14:20

它应该已经挂接到tiny_mce_before_init中。您没有在另一个函数或对象等内部使用它吗?

–芯片Bennett
2011年4月27日在15:19

#3 楼

在随后的Wordpress版本中,这似乎已经有所改变。您现在可以通过以下方式禁用此功能:

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


#4 楼

找到了可能更简单的解决方法:在实际模板上,将其更改为:

<?php echo get_the_content());?>


对此:

<?php echo wpautop(get_the_content());?>


这样,wpautop()会逐个模板地添加TinyMCE剥离的标签。

#5 楼

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

就像这样:

$meta = "content of the metabox";
echo apply_filters('the_content', $meta);


过滤器the_content将自动转换链接刹车至<br><p>

评论


在发布此问题时,wp_editor()函数不可用。

– Pippin
2012年1月23日下午4:17

#6 楼

另一个简单的解决方案:使用Shortcodes! br />
add_shortcode("br", "br_tag");

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

}


#7 楼

适用于将metabox用于wordpress的用户:
插件名称:Meta Box
插件URI:deluxeblogtips com / meta-box

我修改了/ vendor / meta-box /inc/fields/wysiwyg.php
在静态函数中:

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

//just after the else i have added :
$meta = html_entity_decode($meta); // 
//and solve the problem ;)


-更好的解决方案是-

将其放入functions.php中,它会从metaboxes插件开始调用过滤器:

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


评论


现在,您无法再更新插件。不是一个好的解决方案。

– fuxia♦
13年11月6日在12:26

有一些更具建设性的意见吗? :)我在哪里可以将此代码放在functions.php上?

– ClaudioC
13年11月6日在17:15

在插件之前插入save_post并在单独的函数中准备值?

– fuxia♦
13年11月6日在17:33