サポート » 使い方全般 » カスタムフィールドが「エンター」で更新されるのを止めたいです

  • 解決済 seigneurman

    (@seigneurman)


    お世話になります。

    投稿にカスタムフィールドを独自に設置したのですが、ここにカーソルがある状態で「エンター」をクリックすると、勝手に「更新」がクリックされたのと同様に投稿が更新されてしまいますよね。

    この機能を止めたいのですが、可能でしょうか。

    検証したところ、どうやらカスタムフィールドが<input>の場合だけ発生するもののようで、<textarea>では「エンター」をクリックしても勝手に更新されることはありませんでした。

    解決策を知りたいです。宜しくお願い致します。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • こんにちは

    エディターはブロックエディターでしょうか?クラシックエディターでしょうか?
    また、カスタムフィールドは標準のカスタムフィールドでしょうか?それとも ACF などのプラグインによるものでしょうか?

    スレッド開始 seigneurman

    (@seigneurman)

    ご回答ありがとうございます。

    ●エディター
    クラシックエディターになります。
    最新のワードプレス(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' );
    スレッド開始 seigneurman

    (@seigneurman)

    なるほど、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 が使用されるためだと思います。

    スレッド開始 seigneurman

    (@seigneurman)

    夜分遅くに失礼致します。無事できました。
    大変丁寧なご対応に心より感謝申し上げます。

    はい、そうです。

    なるほど。ありがとうございます。

    こちらのページが参考になると思います。

    こういうページを探していました。さすがです。

    textarea は複数行の入力ができるので、

    たしかに。当然でしたね(笑)

    • この返信は1年、 12ヶ月前にseigneurmanが編集しました。
6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「カスタムフィールドが「エンター」で更新されるのを止めたいです」には新たに返信することはできません。