Вопрос или проблема
У меня есть следующий код:
function auto_link_post_titles( $content, $post_id, $field ) {
$excluded_ids = array(); // Здесь укажите ID страниц, которые вы хотите исключить
$excluded_field_names = array(); // Здесь укажите названия полей, которые вы хотите исключить
if(!in_array($post_id, $excluded_ids) && !in_array($field['name'], $excluded_field_names)) {
// Устанавливаем тип(ы) постов, которые мы будем получать.
$desired_post_types = array( 'my_post_type', 'my_other_post_type' );
// Это для получения всех опубликованных постов из всех типов постов.
$args = array(
'post_type' => $desired_post_types,
'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 . '" target="_blank">' . $post_title . '</a>';
// Здесь мы заменяем обычный текст заголовка на ссылку.
$content = str_replace( $post_title, $link, $content );
}
}
return $content;
}
// Мы применяем функцию к контенту постов.
// Обратите внимание, что количество параметров здесь установлено на 3
add_filter( 'acf/load_value', 'auto_link_post_titles', 10, 3 );
К сожалению, этот код нарушает работу плагинов “Ninja Tables” и “Ninja Tables Pro”.
Вопрос, моя проблема:
Можно ли исключить эту функцию для конкретного плагина? И если да, то как? (Плагин загружает значения ACF.)
С помощью данной строки вы сможете проверить, связано ли запрос с Ninja Tables. Также вы можете изменить это, если у вас есть другое условие для определения контекста плагина.
В этом случае мы использовали did_action('ninja_tables_loaded')
, чтобы проверить, была ли вызвана акция ninja_tables_loaded
, что может быть специфично для Ninja Tables.
Данный код необходимо добавить под $excluded_field_names = array();
Этот код будет проверять контекст для Ninja Tables, и если это верно, то он вернется отсюда без дальнейшей обработки.
// Проверка на контекст Ninja Tables
if ( isset( $_GET['ntb'] ) || did_action( 'ninja_tables_loaded' ) ) {
return $content;
}
Ответ или решение
Конечно! Вот полный ответ на ваш вопрос о том, как исключить функцию автоссылки на заголовки постов для конкретного плагина, такого как "Ninja Tables" и "Ninja Tables Pro".
Для начала, вы правильно отметили, что нужно добавить проверку на загрузку плагина, чтобы избежать конфликтов. В вашем коде необходимо добавить условие, которое будет проверять, загружен ли плагин "Ninja Tables". Это можно сделать с помощью функции did_action()
или проверяя наличие определенных параметров в запросе.
Вот обновленный код вашей функции auto_link_post_titles
с добавленной проверкой:
function auto_link_post_titles( $content, $post_id, $field ) {
$excluded_ids = array(); // Укажите здесь ID страниц, которые хотите исключить
$excluded_field_names = array(); // Укажите здесь названия полей, которые хотите исключить
// Проверка на контекст Ninja Tables
if ( isset( $_GET['ntb'] ) || did_action( 'ninja_tables_loaded' ) ) {
return $content; // Если это запрос Ninja Tables, возвращаем контент без изменений
}
if ( !in_array( $post_id, $excluded_ids ) && !in_array( $field['name'], $excluded_field_names ) ) {
// Устанавливаем типы постов, которые будем извлекать.
$desired_post_types = array( 'my_post_type', 'my_other_post_type' );
// Получаем все опубликованные посты из всех указанных типов.
$args = array(
'post_type' => $desired_post_types,
'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 . '" target="_blank">' . $post_title . '</a>';
// Заменяем заголовок на ссылку в контенте.
$content = str_replace( $post_title, $link, $content );
}
}
return $content;
}
// Применяем функцию к контенту постов.
// Обратите внимание, что количество параметров установлено на 3 здесь
add_filter( 'acf/load_value', 'auto_link_post_titles', 10, 3 );
В этом коде добавлена проверка на наличие плагина "Ninja Tables". Если один из условий истинно (например, запрос содержит параметр ntb
или действие ninja_tables_loaded
уже было вызвано), функция будет завершаться и возвращать контент без изменений. Это позволяет исключить обработку функции автоссылки для контента, который обрабатывается Ninja Tables, предотвращая возможные конфликты.
Проверьте, чтобы изменения правильно сохранялись. Если когда-либо возникнет необходимость исключить другие плагины, вы можете добавить аналогичные проверки в эту же функцию.