Если вашему блогу уже несколько лет и в какой-то момент вы перешли на редактор Gutenberg, оставив все старые посты, опубликованные в классическом формате редактора, вы можете захотеть преобразовать их в блоки Gutenberg одним махом.
Такая миграция может дать некоторые преимущества в плане SEO и производительности. О них мы расскажем в конце этого поста.
Преобразование в блоки Единственный достойный плагин , облегчающий эту конвертацию, - Convert To Blocks . Просто установите его. У него нет настроек или области администрирования, да она и не нужна.
Теперь, открыв список записей, вы обнаружите справа от заголовка новый столбец, в котором указано, была ли запись опубликована с помощью классического редактора или редактора блоков Гутенберга. Однако не хватает способа их сортировки.
Это не так уж и здорово, потому что это можно сделать с помощью функции, которая добавит колонку справа, показывающую "Classic" или "Gutenberg" к каждому посту. Что-то вроде этого:
// Añadir la columna personalizada en la lista de entradas que muestre si fueron publicadas con el editor Clásico o Gutenberg
function add_editor_type_column($columns) {
$columns['editor_type'] = 'Editor';
return $columns;
}
add_filter('manage_posts_columns', 'add_editor_type_column');
// Mostrar el contenido de la columna personalizada
function display_editor_type_column($column_name, $post_id) {
if ($column_name === 'editor_type') {
$content = get_post_field('post_content', $post_id);
if (strpos($content, '<!-- wp:') !== false) {
echo 'Gutenberg';
} else {
echo 'Clásico';
}
}
}
add_action('manage_posts_custom_column', 'display_editor_type_column', 10, 2);
// Hacer que la columna sea ordenable
function make_editor_type_column_sortable($columns) {
$columns['editor_type'] = 'editor_type';
return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'make_editor_type_column_sortable');
// Modificar la consulta para ordenar por el tipo de editor
function sort_posts_by_editor_type($query) {
if (!is_admin() || !$query->is_main_query()) {
return;
}
if ($query->get('orderby') === 'editor_type') {
$query->set('meta_key', '_editor_type');
$query->set('orderby', 'meta_value');
}
}
add_action('pre_get_posts', 'sort_posts_by_editor_type');
// Guardar el tipo de editor como metadato al guardar el post
function save_editor_type_metadata($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
$content = get_post_field('post_content', $post_id);
$editor_type = (strpos($content, '<!-- wp:') !== false) ? 'gutenberg' : 'classic';
update_post_meta($post_id, '_editor_type', $editor_type);
}
add_action('save_post', 'save_editor_type_metadata');
Плагин интересен тем, что конвертация происходит "на лету". Это означает, что если вы редактируете какой-либо пост, он автоматически конвертируется в Gutenberg, когда вы откроете редактор. Если что-то пойдет не так, вы сможете увидеть это и выйти без сохранения, отбросив изменения, отредактировать то, что, по вашему мнению, вызвало ошибку конвертации, и попробовать снова.
Он отлично подходит для конвертации нескольких десятков постов. Он работает очень хорошо и успешно конвертирует почти все посты, на которых я его тестировал. Convert to Blocks предупреждает, что по умолчанию он не будет конвертировать ваши пользовательские блоки.
Массовое или пакетное преобразование Но что делать, если у вас сотни или тысячи постов, которые нужно конвертировать, как в моем случае? Вот тут-то и проявляется самая полезная функция плагина. Он позволяет выполнять массовую конвертацию с помощью WP-CLI . Если вы уже знаете, как использовать WP-CLI, то можете пропустить этот пункт, а если не знаете, то перейдите по этой ссылке .
На их странице GitHub вы можете найти список команд , которые вы можете использовать.
NOMBRE
wp convert-to-blocks start
DESCRIPCIÓN
Inicia una nueva Migración. El comando imprime la URL que debe abrirse en un navegador para conectarlo a la CLI de WP.
SYNOPSIS
wp convert-to-blocks start [--post_type=<post_type>] [--per_page=<per_page>] [--page=<page>] [--only=<only>] [--catalog] [--reset]
OPCIONES
[--post_type=<post_type>]
Lista opcional delimitada por comas de los tipos de entrada a migrar. Por defecto post,page
[--per_page=<per_page>]
Número opcional de posts a migrar por lote. Por defecto no hay límite. Combinar con --page para paginar.
[--page=<page>]
Número de página opcional desde el que iniciar la migración. Por defecto es 1.
[--only=<only>]
Lista opcional delimitada por comas de ID de post a migrar.
[--catalog]
Bandera opcional para migrar sólo las entradas etiquetadas del editor clásico. Requiere que el plugin Block Catalog esté presente y haya sido indexado.
[--reset]
Detiene cualquier migración en curso y restablece el estado de la migración.
NOMBRE
wp convert-to-blocks stop
DESCRIPCIÓN
Detiene la migración en curso si está activa.
NOMBRE
wp convert-to-blocks status
DESCRIPCIÓN
Imprime el estado de la migración en curso.
Если у вас виртуальный хостинг или вы просто не хотите снижать скорость загрузки из-за высокой загрузки процессора при конвертации (имейте в виду, что она не только конвертирует, но и должна сохранить/опубликовать все посты по одному), я советую вам делать это пакетно.
Я выбрал вариант конвертации определенного количества сообщений, добавляя блоки примерно по 100 идентификаторов в каждой партии.
Мы знаем, как увидеть ID поста, потому что в редакции он отображается в URL, но теперь нам нужно извлечь все ID постов, опубликованных с помощью классического редактора, разделенные запятой без пробелов.
У меня также есть функция для этого.
// Función para obtener los IDs de posts creados con el editor clásico
function obtener_ids_posts_editor_clasico() {
global $wpdb;
// Consulta para obtener los IDs de los posts que NO contienen bloques de Gutenberg
$query = "
SELECT ID
FROM {$wpdb->posts}
WHERE post_content NOT LIKE '%<!-- wp:%'
AND post_status = 'publish'
AND post_type = 'post' -- Solo posts, excluye páginas y otros tipos
AND post_content != '' -- Excluye posts vacíos
AND post_title != '' -- Excluye posts sin título
AND post_name != '' -- Excluye posts sin slug válido
";
$results = $wpdb->get_col($query);
// Convierte el array de IDs en una cadena separada por comas
$ids_comma_separated = implode(',', $results);
return $ids_comma_separated;
}
// Shortcode para mostrar el listado de IDs y el número total de posts con el editor clásico
add_shortcode('listado_ids_clasico', function() {
// Obtener la lista de IDs
$ids_posts_clasico = obtener_ids_posts_editor_clasico();
// Contar el número total de IDs
$total_posts = count(explode(',', $ids_posts_clasico));
// Mostrar el contador y la lista de IDs
return 'Total de posts creados con el editor clásico: ' . $total_posts . '<br>IDs de posts: ' . $ids_posts_clasico;
});
Uso:
1. Copia el código en el archivo functions.php de tu tema o en un plugin personalizado.
2. Inserta el shortcode [listado_ids_clasico] en cualquier página o entrada de WordPress no hace falta que la publiques. Te bastará hacer una vista previa del borrador.
3. El shortcode mostrará el número total de posts creados con el editor clásico y una lista de sus IDs.
- Este código lista solo los posts publicados que no contienen bloques de Gutenberg.
- Excluye páginas, revisiones, posts vacíos, posts sin título y posts sin slug válido.
- Si necesitas incluir otros tipos de contenido (por ejemplo, páginas), cambia `post_type = 'post'` por `post_type IN ('post', 'page')`.
- Si quieres excluir otros tipos de contenido no deseado, agrega más condiciones a la consulta SQL.
И вот что вы получите (*в пересмотре я добавил, что также указываю общую сумму).
Теперь вы можете выбрать любое количество идентификаторов и конвертировать их партиями по своему усмотрению.
Поскольку на LucusHost установлен WP-CLI, из cPanel у меня есть готовый терминал, чтобы дать ему трость.
Он открывается и подключается к корневому пути вашей установки WP.
cd public_html/staging
Enter
Наконец, мы вводим нашу команду с ID постов, которые мы собираемся преобразовать. Пример:
wp convert-to-blocks start --only=3017,3100,3145,3281,3357,4121,4505,4564,4586,4623,4647,4665,4688,4706,4712,4727,4793,16019,50411,87386
Повторное нажатие клавиши Enter приведет к появлению url-адреса, который нужно открыть в новом окне, чтобы начать процесс.
Преобразование... Осталось дождаться окончания работы над ним и взглянуть на конверсии, чтобы понять, есть ли что отполировать и подправить.
Преимущества SEO и производительности Многие по-прежнему остаются верны минимализму классического редактора , но Gutenberg, пусть и отчаянно медленными темпами, значительно улучшился с момента своего выхода. Его использование уже имеет больше преимуществ, чем недостатков.
Преимущества SEO: Не ждите, что, сделав это преобразование, ваш сайт в одночасье возглавит список результатов поиска, но каждое улучшение идет в плюс.
Улучшенная структура контента: Gutenberg позволяет создавать более структурированный контент с помощью блоков (абзацы, заголовки, списки и т. д.). Это облегчает поисковым системам понимание иерархии и релевантности контента. Оптимизация заголовков (H1, H2, H3 и т. д.): Добавлять и управлять заголовками стало проще, что улучшает читабельность и организацию контента. Больше оптимизированных изображений: Gutenberg позволяет добавлять атрибуты alt, заголовки и описания непосредственно к блокам изображений. Использование специальных блоков для SEO: Если вы используете такие плагины, как Yoast SEO или Rank Math , они предлагают специальные блоки для улучшения SEO (например, блоки FAQ или Schema Markup). Больше интерактивного контента: Интерактивные блоки (таблицы, кнопки, аккордеоны) улучшают пользовательский опыт и снижают процент отказов. Длинные записи с большим количеством элементов, опубликованные в классическом редакторе, имеют высокий CLS, а также работают медленнее, поэтому хуже индексируются или теряют позиционирование. Преимущества производительности: Более чистый и легкий код: Gutenberg генерирует более чистый, семантический HTML, уменьшая размер страниц и улучшая время загрузки. Отложенное использование ресурсов: Некоторые блоки (например, изображения) поддерживают ленивую загрузку изначально. Меньше зависимости от шорткодов: Gutenberg позволяет заменить многие шорткоды более эффективными собственными блоками. Оптимизация видимого контента (над сгибом): Это позволяет легко создавать оптимизированный контент для видимой части страницы без прокрутки. Требуется меньше плагинов: Уменьшите нагрузку на плагин, интегрировав в него такие функции, как колонки, таблицы или кнопки. Дополнительные преимущества:
Улучшенный опыт редактирования: Он предлагает более современные и интуитивно понятные возможности редактирования. Совместимость с современными темами и плагинами: Многие темы и плагины уже оптимизированы для Gutenberg.
Будущее издательства.
Здесь я не уверен. Gutenberg - это (единственное) будущее WordPress, хотя я не думаю, что FSE (Full Site Editing) будет таким уж большим, потому что не все шаблоны являются FSE, и многие из самых популярных шаблонов не выпустили FSE-версии. Кроме того, сотрудники все еще используют Elementor или Bricks в качестве конструктора или GenerateBlocks и/или Kadence в качестве вспомогательных блоков.