Как сделать заголовок при создании поста обязательным 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]
5 1 vote
Article Rating
guest
0 Комментарий
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x