こんにちは
エディターはブロックエディターでしょうか?クラシックエディターでしょうか?
また、カスタムフィールドは標準のカスタムフィールドでしょうか?それとも ACF などのプラグインによるものでしょうか?
ご回答ありがとうございます。
●エディター
クラシックエディターになります。
最新のワードプレス(5.0.3)ですが、プラグインの「Classic Editor」を有効化してクラシックエディターにしたものです。
●カスタムフィールド
フックを探し下記をfunctions.phpに書いて実装致しました。問題や見落とし等ございましたらご指摘頂けましたら幸いです。
<?php
add_action('add_meta_boxes', 'my_add_meta_boxes', 10, 2);
function my_add_meta_boxes($post_type, $post) {
$meta_info = [ 'key'=>'lang', 'label'=>'言語' ];
add_meta_box( $meta_info['key'], $meta_info['label'], 'my_create_post_meta_field', $post_type, 'side', 'low', $meta_info );
}
function my_create_post_meta_field($post, $meta_info) {
$key = $meta_info['args']['key']; // add_meta_box の7個目の引数が $meta_info['args'] で受け取れる
$data = get_post_meta( $post->ID, $key, true );
echo '<div class="post_meta">';
echo '<input name="'.$key.'" value="'.htmlspecialchars($data, ENT_QUOTES, "UTF-8").'">';
wp_nonce_field( 'action-' . $key, 'nonce-' . $key );
echo '</div>';
}
下記コードではどうでしょうか?
テーマの functions.php に、
function my_admin_enqueue_scripts( $hook ) {
if ( $hook == 'post.php' || $hook == 'post-new.php' ) {
$script = <<<SCRIPT
jQuery(document).on("keypress", "#lang input", function(e) {
var code = e.keyCode || e.which;
if ( code === 13 ) {
return false;
}
});
SCRIPT;
wp_add_inline_script( 'jquery-core', $script );
}
}
add_action( 'admin_enqueue_scripts', 'my_admin_enqueue_scripts' );
なるほど、admin_enqueue_scripts() にはそのような使い方もあるんですね。wp_add_inline_script() というのも知りませんでした。どうもありがとうございます。さっそく試してみたいと思います。
もしよろしければ「$hookの中身」についてお聞かせ頂きたいのですが、これは何が返ってきていると考えればいいのでしょうか?現在表示中のページ?だとすると、「post.php」や「post-new.php」とは、管理画面の「記事編集ページ」や「記事作成ページ」のことですか?また、そのような対応関係が示された一覧表(「post-new.php」はこのページのテンプレートだ)のような説明サイトはご存じありませんでしょうか?
あと(いろいろスミマセン)、<input>では勝手に更新されてしまうのに<textarea>では平気な理由はわかりますでしょうか?
「$hookの中身」についてお聞かせ頂きたいのですが、これは何が返ってきていると考えればいいのでしょうか?現在表示中のページ?だとすると、「post.php」や「post-new.php」とは、管理画面の「記事編集ページ」や「記事作成ページ」のことですか?
はい、そうです。これで特定の管理ページをターゲットにすることができます。
そのような対応関係が示された一覧表(「post-new.php」はこのページのテンプレートだ)のような説明サイトはご存じありませんでしょうか?
こちらのページが参考になると思います。
<input>では勝手に更新されてしまうのに<textarea>では平気な理由はわかりますでしょうか?
textarea は複数行の入力ができるので、その改行として Enter が使用されるためだと思います。
夜分遅くに失礼致します。無事できました。
大変丁寧なご対応に心より感謝申し上げます。
はい、そうです。
なるほど。ありがとうございます。
こちらのページが参考になると思います。
こういうページを探していました。さすがです。
textarea は複数行の入力ができるので、
たしかに。当然でしたね(笑)