Как сделать заголовок при создании поста обязательным WordPress

Нередко создавая сайт на заказ, нам приходится сталкиваться с нестандартными пожеланиями клиента. Например в одном из последних проектов, заказчик пожелал, что-бы при создании статей, поле «Заголовок» было обязательно к заполнению и при попытке сохранить запись с пустым заголовком необходимо было выдавать ошибку с просьбой заполнить это самое поле.
Как ни странно, из коробки такой возможности у WordPress нет, поэтому пришлось прибегнуть к созданию функции, которая выполняла бы необходимый функционал.
А вот так будет выглядеть ошибка, если попытаться добавить пост с пустым (не заполненным) заголовком.
Код можно разместить напрямую в файле functions.php
add_action( 'edit_form_advanced', 'force_post_title' ); function force_post_title( $post ) { $post_types = array( 'post', ); if ( ! in_array( $post->post_type, $post_types ) ) { return; } ?> <script type='text/javascript'> ( function ( $ ) { $( document ).ready( function () { $( 'body' ).on( 'submit.edit-post', '#post', function () { if ( $( "#title" ).val().replace( / /g, '' ).length === 0 ) { if ( !$( "#title-required-msj" ).length ) { $( "#titlewrap" ) .append( '<div id="title-required-msj"><em>Заголовок обязательное поле.</em></div>' ) .css({ "padding": "5px", "margin": "5px 0", "background": "#ffebe8", "border": "1px solid #c00" }); } $( '#major-publishing-actions .spinner' ).hide(); $( '#major-publishing-actions' ).find( ':button, :submit, a.submitdelete, #post-preview' ).removeClass( 'disabled' ); $( "#title" ).focus(); return false; }else{ $( "#titlewrap" ).css({ "padding": "0", "margin": "0", "background": "#fff", "border": "none" }); $('#title-required-msj').remove(); } }); }); }( jQuery ) ); </script> <?php }
Функция предельно проста и основана в на JavaScript. Все что нам необходимо это — повесить выполнение функции на событие (хук), что бы ее выполнение происходило в нужный нам момент.
Хук — Событие edit_form_advanced — позволяет нам управлять содержимым, отображаемым после вывода всех метабоксов на странице редактирования, создания поста.
В этот момент мы выполняем простой, JavaScript код, который отслеживает нажатие кнопки обновления, публикации и в случае если поле «Заголовок» пустое, выводит предупреждение и завершает дальнейшее выполнение кода.
( function ( $ ) { $( document ).ready( function () { //Require post title when adding/editing Project Summaries $( 'body' ).on( 'submit.edit-post', '#post', function () { // If the title isn't set if ( $( "#title" ).val().replace( / /g, '' ).length === 0 ) { // Show the alert if ( !$( "#title-required-msj" ).length ) { $( "#titlewrap" ) .append( '<div id="title-required-msj"><em>Заголовок обязательное поле.</em></div>' ) .css({ "padding": "5px", "margin": "5px 0", "background": "#ffebe8", "border": "1px solid #c00" }); } // Hide the spinner $( '#major-publishing-actions .spinner' ).hide(); // The buttons get "disabled" added to them on submit. Remove that class. $( '#major-publishing-actions' ).find( ':button, :submit, a.submitdelete, #post-preview' ).removeClass( 'disabled' ); // Focus on the title field. $( "#title" ).focus(); return false;
По аналогии с данным примером, мы можем отслеживать заполненность любых полей на странице редактирования, добавления поста.
[tds_note]Стоит отметить, срабатывание данного события происходит на любых типах постов за исключением страниц. Если Вам необходимо проверить заполненность полей именно на страницах, необходимо использовать хук-событие edit_page_form[/tds_note]