こちらの記事の内容、僕自身で最適解がわかっていない箇所があります(※後述)ので、参考程度に見てください。またコメントで指摘などをいただけると助かります。
WordPressのカスタムフィールドに、プラグインを使わずにビジュアルエディタを作成するコード
とりあえず最初に、作成したコードを紹介します。functions.php の中に設置してください。
// 投稿ページの編集画面にメタボックスを設置
function cf__editor() {
if( function_exists( 'add_meta_box' )) {
add_meta_box( 'cf_editor_wrap', 'ビジュアルエディタ' , 'cf__editor__inner', 'post' );
}
}
add_action('admin_menu', 'cf__editor');
// 編集画のメタボックスの中身
function cf__editor__inner() {
echo '<input type="hidden" name="cf__editor_nonce" value="' . wp_create_nonce( plugin_basename(__FILE__) ) . '" ?-->';
$cf__editor = get_post_meta( $post->ID ,'cf__editor' );
$cf__editor = html_entity_decode($cf__editor);
wp_editor( $cf__editor, 'cf__editor' );
}
// データの保存処理
function cf__editor__save( $post_id ) {
if ( !wp_verify_nonce( $_POST['cf__editor_nonce'], plugin_basename(__FILE__) )) {
return $post_id;
}
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id;
if ( 'post' == $_POST['post_type'] ) {
if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id;
}
$cf__editor = $_POST['cf__editor'];
$cf__editor = str_replace( array( '\"', "\'" ), array( '"', "'" ),$cf__editor);
$cf__editor = htmlspecialchars($cf__editor);
if( !get_post_meta( $post_id , 'cf__editor') ){
add_post_meta( $post_id , 'cf__editor', $cf__editor );
}else{
update_post_meta( $post_id , 'cf__editor', $cf__editor );
}
}
add_action('save_post', 'cf__editor__save')
課題・疑問点
データの保存処理の箇所に下記の1行を追加しているのですが、この処理で正しいのかが微妙です。
$cf__editor = str_replace( array( '\"', "\'" ), array( '"', "'" ),$cf__editor);
上記の処理は、ビジュアルエディタからpostされるデータを正常に保存するために挿入しています。
ビジュアルエディタのデータをそのままPOSTすると、「” → \”」のようにバックスラッシュが挿入されてしまい上手く保存することができなくなっため、それを解消するために追加しました。
ですが、もっと良い処理の仕方があるような気がするので、もしご存知の方がいたら教えてください。