Показать Редактор по умолчанию на странице Блога (Панель администрирования)
В WordPress 4.2 он включал приятную функцию, которая указывала, какая страница была главной страницей, а какая страница была блогом (Последние сообщения). К сожалению, он также удаляет редактор по умолчанию на странице, назначенной для отображения последних сообщений, и вместо этого показывает следующее сообщение:
В настоящее время вы редактируете страницу, на которой отображаются ваши последние сообщения.
Я хочу назначить контент странице блога, чтобы он отображался над моими последними публикациями через:
get_post_field( 'post_content', get_option( 'page_for_posts' ) );
Как я могу повторно добавить редактор WP по умолчанию на страницу блога в панели администрирования без добавления отдельного метабокса?
2 answers
В WordPress 4.2 редактор был удален на любой странице, назначенной для отображения последних сообщений по какой-либо причине. Следующая функция ниже (оригинальное решение, найденное здесь crgeary), повторно добавит редактор и удалит уведомление:
В настоящее время вы редактируете страницу, на которой отображаются ваши последние сообщения.
Вот некоторая информация об используемых крючках:
-
edit_form_after_title
- Используется для удаления вышеупомянутого администратора уведомление. -
add_post_type_support
- Используется для возврата поддержки редактора на страницу последних сообщений.
if( ! function_exists( 'fix_no_editor_on_posts_page' ) ) {
/**
* Add the wp-editor back into WordPress after it was removed in 4.2.2.
*
* @param Object $post
* @return void
*/
function fix_no_editor_on_posts_page( $post ) {
if( isset( $post ) && $post->ID != get_option('page_for_posts') ) {
return;
}
remove_action( 'edit_form_after_title', '_wp_posts_page_notice' );
add_post_type_support( 'page', 'editor' );
}
add_action( 'edit_form_after_title', 'fix_no_editor_on_posts_page', 0 );
}
Редактировать для WordPress 4.9
Начиная с WordPress 4.9.6, это не позволяет повторно установить редактор. Похоже, что действие edit_form_after_title
вызывается недостаточно быстро. Эта модификация, вызванная на самом раннем не устаревшем крючке после удаления редактора в edit-form-advanced.php
, похоже, работает нормально.
Помимо смены крючка, есть изменение в номере параметров тоже.
if( ! function_exists( 'fix_no_editor_on_posts_page' ) ) {
function fix_no_editor_on_posts_page( $post_type, $post ) {
if( isset( $post ) && $post->ID != get_option('page_for_posts') ) {
return;
}
remove_action( 'edit_form_after_title', '_wp_posts_page_notice' );
add_post_type_support( 'page', 'editor' );
}
add_action( 'add_meta_boxes', 'fix_no_editor_on_posts_page', 0, 2 );
}
Прошло некоторое время, но я наткнулся на эту тему, когда искал способ включить редактор Гутенберга на странице блога. Не нашел никакой подсказки в Google, поэтому я нырнул в код wordpress и нашел решение. Вот код:
add_filter( 'replace_editor', 'enable_gutenberg_editor_for_blog_page', 10, 2 );
/**
* Simulate non-empty content to enable Gutenberg editor
*
* @param bool $replace Whether to replace the editor.
* @param WP_Post $post Post object.
* @return bool
*/
function enable_gutenberg_editor_for_blog_page( $replace, $post ) {
if ( ! $replace && absint( get_option( 'page_for_posts' ) ) === $post->ID && empty( $post->post_content ) ) {
// This comment will be removed by Gutenberg since it won't parse into block.
$post->post_content = '<!--non-empty-content-->';
}
return $replace;
}
Я использовал фильтр 'replace_editor' только потому, что это последний фильтр/действие, используемое перед проверкой, должен ли загружаться Гутенберг. Это может быть любой более ранний фильтр или действие с текущим доступным объектом post.
WordPress проверяет две вещи: если текущий идентификатор записи совпадает с параметром page_for_posts
, и если содержимое пустое, поэтому в этом фильтре мы просто добавим немного поддельного контента, который будет удален Гутенбергом, так как это случайный HTML-комментарий.
Надеюсь, кто-нибудь найдет это полезным:)