web-dev-qa-db-ja.com

HTMLを変更するためにポストエディタのtitleフィールドにフックするにはどうすればいいですか?

JavascriptやPHP検証なしに投稿エディタで投稿タイトルを必須にしたいのですが、投稿タイトルのinput要素にHTMLの "required"属性を追加するなど、本当に簡単なものが欲しいのです。

私は "edit_form_top"と "edit_form_after_title"があるのを見ますが、それらのフックはタイトル入力の直前と直後に位置合わせします。

役職フィールドのHTMLを実際に変更する方法はありますか?

3
mike23

入力のHTMLを変更するための no hook があります(プレースホルダーテキストを変更するためのenter_title_hereフィルターのみ)。ただし、これはjQueryを使って簡単に実現できます。あなたの機能性プラグインかテーマのfunctions.phpファイルでこれを試してください:

// Add to the new post screen for any post type
add_action( 'admin_footer-post-new.php', 'wpse_add_required_attr_to_title_field' );

// Add to the post edit screen for any post type
add_action( 'admin_footer-post.php', 'wpse_add_required_attr_to_title_field' );

function wpse_add_required_attr_to_title_field() {
    ?>
    <script>
        jQuery(document).ready(function($){
            $('input[name=post_title]').prop('required',true);
        });
    </script>
    <?php
}

ただし、このサイトの管理者のユーザーベースがどのようなものであるかがわからないため、必須の属性 全面的に同じ実装ではない にのみ基づいてフォームを送信しないようにします。これがあなたのユースケースにとって重要であるなら、例えば Force Post Title プラグインのようにそれ自身の警告を強制する実装を見たいかもしれません。

2
brianjohnhanna

Brianjohnhannaが指摘しているように、titleフィールドのHTMLを変更するためのフックはないので、最も可能性の高い答えはjQuery検証を行うことです。

これが私がやることになったものです、でプラグインを作成します:

function wpse_242302_mandatory_title( $hook ) {

    global $post;

    if ( $hook == 'post-new.php' || $hook == 'post.php' ) {

        wp_enqueue_script( 'mandatory-title', plugins_url( 'mandatory-title.js', __FILE__ ), array( 'jquery' ) );

    }
}
add_action( 'admin_enqueue_scripts', 'wpse_242302_mandatory_title', 20, 1 );

そしてjavascript:

$(document).ready(function() {

    $('#post').submit(function(){

        if( !$('input[name=post_title]').val() ) {

            $( '.wrap > h1').after('<div id="message" class="error"><p>Please enter a title.</p></div>' );

            return false;

        }

    });

});

デフォルトのWordpressのエラーメッセージを表示する "required"属性を追加する代わりに、これは管理者とより良く統合されていると思いました。

1
mike23