やあみんな、私はカスタムメタボックスに表示されるいくつかのテキストエリアに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>
タグを除いて、すべての書式設定ボタンは問題なく機能します。
投稿メタが保存される前後にエディタがそれらを削除しているのかどうかはわかりません。
アイデア?
私は最近これがうまくいった。 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));
}
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設定パラメータ で試して、変更する必要があるものを見つけてください。
これは、Wordpressの後続のバージョンで少し変わったようです。これで、この機能を無効にすることができます。
add_filter('tiny_mce_before_init', function($init) {
$init['wpautop'] = false;
return $init;
}
おそらくもっと簡単な回避策が見つかりました。
実際のテンプレートでは、これを変更します。
<?php echo get_the_content());?>
これに:
<?php echo wpautop(get_the_content());?>
このようにして、wpautop()addsテンプレートごとにTinyMCEによってタグが取り除かれました。
ちょっとしたことを表現するのに、なぜあなたはwordpressの新しい関数 wp_editor
を使わないのですか。そうすればすべてが処理されます。また、コンテンツをユーザーに表示するときには、フィルタthe_content
を適用します。
このような:
$meta = "content of the metabox";
echo apply_filters('the_content', $meta);
フィルタthe_content
は自動的にリンクブレーキを<br>
と<p>
に変換します。
これは、ワードプレスにメタボックスを使用する人のためのものです。プラグイン名:メタボックスプラグイン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 ;)
- しかし、より良い解決策IS -
これをfunctions.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
もう一つの簡単な解決策:ショートコードを使う!
このコードをfunctions.phpに配置し、brタグを表示する場所には、コンテンツエディタ(HTMLまたはビジュアル)の[br]を使用します。
add_shortcode("br", "br_tag");
function br_tag(){
return("<br/>");
}