Steamer Lane Studio技術備忘録WordPress

WordPress自作テーマのfunction.phpに合ったら便利なコード

wordpress WordPress自作テーマのfunction.phpに合ったら便利なコード
最終更新日: 2023年4月15日

WPも色々便利(場合によっては余計な)な機能を付けてくるが、今回は投稿で使う新エディターが「無理」「Tinymceが良い」という場合の追記コード。 //投稿の自動整形制御
add_action(
'add_meta_boxes',
function(){
$screens = array('post', 'page');
foreach($screens as $scrn){
add_meta_box(
'peralab-custombox-dont-autoformatting',
//編集画面セクションのHTML ID

'自動整形を無効化',
//メタボックスのタイトル
'PeralabDontAutoFormatting_CustomBoxCreate',
//入力フォーム作成で呼び出されるコールバック
$scrn,
//表示するページ
'side',
//メタボックス表示箇所(advanced, normal, side)
'default',
//表示優先度(high, core, default, low)
null);
//コールバック時に渡す引数があれば指定
}
}
);
// メタボックスを作成
function PeralabDontAutoFormatting_CustomBoxCreate($post){ //$postには現在の投稿記事データが入っています
//入力済みのデータを取得
$data_str = get_post_meta($post->ID, "dont_autoformat_radio", true);
if($data_str != 'dont'){
$data_str = 'format';
}
//nonce作成
wp_nonce_field('action-noncekey-dontautoformat', 'noncename-dontautoformat');

?>


<?php
}

// カスタムボックス内のフィールド値更新処理
add_action(
'save_post',
function($post_id){
//nonceを確認
if(isset($_POST['noncename-dontautoformat']) == false
|| wp_verify_nonce($_POST['noncename-dontautoformat'], 'action-noncekey-dontautoformat') == false) {
return; //nonceを認証できなかった
}

//自動保存ルーチンかどうかチェック。そうだった場合はフォームを送信しない(何もしない)

if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){
return;
}

//パーミッション確認
if(isset($_POST['post_type'])){
if($_POST['post_type'] == 'page'){
if(!current_user_can('edit_page', $post_id)){
return; //固定ページを編集する権限がない
}
}
else{
if(!current_user_can('edit_post', $post_id)){
return; //記事を編集する権限がない
}
}
}

//== 確認ここまで ==

//予約投稿時は、データが有るにも関わらず$_POSTからデータ取得ができないので、
//issetでデータ確認が出来るときのみ値の更新処理を行います。
if(isset($_POST['name-metabox_autoformat_radio'])){
update_post_meta($post_id, "dont_autoformat_radio", $_POST['name-metabox_autoformat_radio']);
}
}
);

// 自動整形無効の実処理

//記事表示時の整形無効
add_action(
'wp_head',
function(){
if(get_post_meta(get_the_ID(), 'dont_autoformat_radio', true) == 'dont'){
remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');
}
}
);

//ビジュアルエディタ(TinyMCE)の整形無効
add_filter(
'tiny_mce_before_init',
function($init_array){
if(get_post_meta(get_the_ID(), 'dont_autoformat_radio', true) == 'dont'){
global $allowedposttags;
$init_array['valid_elements'] = '*[*]';
$init_array['extended_valid_elements'] = '*[*]';
$init_array['valid_children'] = '+a[' . implode( '|', array_keys( $allowedposttags ) ) . ']';
$init_array['indent'] = true;
$init_array['wpautop'] = true;
$init_array['force_p_newlines'] = false;
}
return $init_array;
}
);
「出力する文字列」のとこは適当にわかりやすいようにすればい善し。