<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之前或之后删除它们。
想法?
#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
评论
我设法使其以一种方式工作。通过从核心复制功能,并将'remove_linebreaks'=> true更改为'remove_linebreaks'=> false。但是如果我在传递给函数的设置数组中指定'remove_linebreaks'=> false,这将不起作用@Arthur Carabott是的,那对我也有用。让我们添加到文档的链接:codex.wordpress.org/Function_Reference/wpautop再见!
我们看到了一件很奇怪的事情。手工输入/粘贴的帖子在编辑时保留了休息时间。我们导入的帖子必须由编辑者删除,以免在编辑时出现换行符。