Intereting Posts
Сильное ядро ​​для использования .dev файлов JavaScript Где я могу скачать темы WordPress? Карта сайта WordPress с пользовательскими типами сообщений Установка локального WP в подкаталог Ограничить доступ админ-загрузок к определенным зарегистрированным пользователям? Заказывать сообщения по значению мета и дате Включая необходимые функции для пользовательской формы регистрации ajax Отображение миниатюр из предыдущих и последующих сообщений Меню jQuery в меню подчеркивания Как отобразить список авторов с разбиением на страницы в виджетах Programatticaly Import Pages при сохранении иерархии WordPress wp-json API – Пользовательский тип сообщения возвращает 403 Пользовательское форматирование RSS Крюк / действие после WP_Query получает сообщения для запроса пользовательских таблиц для метаданных Уведомлять администратора (по электронной почте), если сообщение добавлено с определенным тегом

Отметить публикацию для пустого заголовка

У меня есть несколько пользователей wp, которые не вставляют заголовок при создании нового сообщения (и сообщения о настраиваемом типе). Это означает, что для постоянной ссылки назначается номер в качестве ссылки. В рамках мультисайта, который я разрабатываю, это обычно останавливает связь от работы (страница только обновляется).

Я хочу показать предупреждающее сообщение, когда пользователь не может вставить заголовок в сообщение перед публикацией (говоря им, чтобы вставить заголовок и изменить постоянную ссылку).

Мой код до сих пор находится в файле functions.php:

function check_for_post_title( $post, $ID ) { $title = $post->post_title; $permalink = get_permalink( $ID ); if($title =='' || $title == null) { no_post_title_notice(); } else { some_post_title_notice(); } } add_action( 'publish_post', 'check_for_post_title', 10, 2 ); function no_post_title_notice() { ?> <div class="notice notice-warning is-dismissible"> <p><?php _e( 'You have not provided a title for your post/page. This will cause the link to be broken. Please revise', 'understrap-post-title' ); ?></p> </div> <?php } function some_post_title_notice() { ?> <div class="notice notice-warning is-dismissible"> <p><?php _e( 'I dont know why this message is appearing', 'understrap-post-title' ); ?></p> </div> <?php } 

В настоящее время он не работает, и никаких уведомлений не появляется в верхней части экрана редактирования сообщений после публикации / обновления вообще. Не уверен, почему он вообще не стреляет (даже «чужое» заявление должно что-то уволить). Что я делаю не так?

Solutions Collecting From Web of "Отметить публикацию для пустого заголовка"

Ваша ошибка не появляется на экране, потому что страница перезагружается после действия publish_post .

Я полностью придерживался другого подхода, я проверяю заголовок сообщения в wp_insert_post_data если заголовок пуст, я отмечаю post_status как черновик и сохраняю простой флаг в таблице опций. Сохраненный флаг используется, чтобы скрыть сообщение «Опубликованное сообщение» и отобразить уведомление администратора для указания заголовка, чтобы опубликовать сообщение.

В тот же момент я удаляю вариант, поэтому уведомление одно время. Вы можете изменить его в большей степени в соответствии с вашими требованиями, но это основное решение и должно работать нормально.

 /** * Checks for empty post title, if empty sets the post status to draft * * @param $data * @param $postarr * * @return array */ function wse_279994_check_post_title( $data, $postarr ) { if ( is_array( $data ) && 'publish' == $data['post_status'] && empty( $data['post_title'] ) ) { $data['post_status'] = 'draft'; update_option( 'wse_279994_post_error', 'empty_title' ); } return $data; } add_filter( 'wp_insert_post_data', 'wse_279994_check_post_title', 10, 2 ); /** * If the post title was empty, do not show post published message */ add_filter( 'post_updated_messages', 'wse_279994_remove_all_messages' ); function wse_279994_remove_all_messages( $messages ) { if ( get_option( 'wse_279994_post_error' ) ) { return array(); } else { return $messages; } } /** * Show admin notice for empty post title */ add_action( 'admin_notices', 'wse_279994_show_error' ); function wse_279994_show_error() { $screen = get_current_screen(); if ( $screen->id != 'post' ) { return; } if ( ! get_option( 'wse_279994_post_error' ) ) { return; } echo '<div class="error"><p>' . esc_html__( "You need to enter a Post Title in order to publish it.", "wse" ) . '</p></div>'; delete_option( 'wse_279994_post_error' ); }