Вопрос или проблема
Обнаружение заголовка(ов) поста в содержании и автоматическая привязка
Я ищу фрагмент кода или плагин, чтобы решить одну из моих проблем.
Существует 4 разных типа постов. У каждого из них как минимум 5000 постов.
Я хочу: если я введу заголовок поста (обый текст) в содержимое, он автоматически получит ссылку на пост.
Так что, если у меня есть пост с заголовком “CCC”, и я вставлю его в содержимое другого поста, WordPress автоматически обнаружит это и свяжет “CCC”.
Это возможно? Существует ли такой плагин, фрагмент кода или что-то еще?
Спасибо
Вы можете достичь желаемого результата с использованием данного кода, который нужно добавить в файл functions.php
вашей темы.
Данный код автоматически преобразует заголовки в содержимом ваших постов в ссылки, указывающие на соответствующие посты.
<?php
function auto_link_post_titles( $content ) {
// Это нужно для получения всех опубликованных постов из всех типов постов.
$args = array(
'post_type' => 'any', // это необходимо для получения постов из всех типов.
'post_status' => 'publish',
'posts_per_page' => -1, // это для получения всех постов
);
$posts = get_posts( $args );
// Здесь мы проходим через каждый пост и заменяем заголовок в содержимом на ссылку.
foreach ( $posts as $post ) {
$post_title = esc_html( $post->post_title ); // Здесь мы получаем заголовок поста.
$post_link = esc_url( get_permalink( $post->ID ) ); // Здесь мы получаем ссылку на пост.
// Создаем элемент ссылки
$link = '<a href="' . $post_link . '">' . $post_title . '</a>';
// Здесь мы заменяем обычный текст заголовка на ссылку.
$content = str_replace( $post_title, $link, $content );
}
return $content;
}
// Мы применяем функцию к содержимому постов.
add_filter( 'the_content', 'auto_link_post_titles' );
Ответ или решение
Для автоматического связывания заголовков постов с их ссылками в содержимом WordPress, вы можете использовать следующий код, который необходимо добавить в файл functions.php
вашей темы. Этот код просматривает все опубликованные посты и автоматически заменяет текст заголовков на ссылки на соответствующие записи.
<?php
function auto_link_post_titles( $content ) {
// Получаем все опубликованные посты всех типов
$args = array(
'post_type' => 'any', // получаем посты всех типов
'post_status' => 'publish',
'posts_per_page' => -1, // извлекаем все посты
);
$posts = get_posts( $args );
// Проходим по каждому посту и заменяем заголовок в содержимом на ссылку
foreach ( $posts as $post ) {
$post_title = esc_html( $post->post_title ); // получаем заголовок поста
$post_link = esc_url( get_permalink( $post->ID ) ); // получаем ссылку на пост
// Создаем элемент ссылки
$link = '<a href="' . $post_link . '">' . $post_title . '</a>';
// Заменяем простой текст заголовка на ссылку
$content = str_replace( $post_title, $link, $content );
}
return $content;
}
// Применяем функцию к содержимому постов
add_filter( 'the_content', 'auto_link_post_titles' );
?>
Пояснение к коду:
-
Получение постов: Код использует функцию
get_posts()
для получения всех опубликованных постов из всех типов. Вы можете настроить аргументы по мере необходимости, чтобы ограничить выборку по конкретным типам записи или статусам. -
Цикл по постам: Для каждого поста извлекается заголовок и ссылка. Заголовок очищается с помощью
esc_html()
, чтобы избежать проблем с XSS, а ссылка — с помощьюesc_url()
. -
Замена текста на ссылку: Используется функция
str_replace()
для замены текстового заголовка на HTML-элемент ссылки. - Фильтрация контента: Код добавляет наш фильтр
the_content
, благодаря чему функция будет применена к содержимому каждого поста при выводе на экран.
Использование:
Просто вставьте данный код в файл functions.php
вашей активной темы WordPress. После этого, если в любом содержимом поста будет присутствовать текст заголовка другого поста, этот текст автоматически станет кликабельной ссылкой на соответствующий пост.
Таким образом, вы получите автоматическое связывание заголовков с их страницами, что улучшит навигацию по вашему сайту и повысит удобство пользователей. Если у вас возникнут какие-либо вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться!