Вопрос или проблема
У меня есть следующий код:
function auto_link_post_titles( $content ) {
// Устанавливаем тип поста(ов), которые мы будем получать.
$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;
}
// Мы применили функцию к содержимому постов.
add_filter( 'acf/load_value', 'auto_link_post_titles' );
Я хотел бы попросить помощи с двумя проблемами:
-
Я хотел бы исключить эту функцию на определенных страницах. Возможно ли добавить кусок кода, который исключит этот add_filter для пользовательских страниц?
-
Я хотел бы исключить эту функцию из определенных полей ACF. Возможно ли добавить кусок кода, который исключит этот add_filter для пользовательских полей ACF?
Спасибо!
Ответ или решение
Конечно, давайте разберем, как можно решить ваши две проблемы касательно функции auto_link_post_titles
.
1. Исключение функции для определенных страниц
Чтобы исключить функцию для определенных страниц, вы можете использовать условные теги WordPress в вашем коде. Например, если вы хотите исключить эту функцию для страниц с определенными идентификаторами или с определенным числом (slug), вы можете сделать это следующим образом:
function auto_link_post_titles( $content ) {
// Проверяем, не находимся ли мы на странице, которую нужно исключить
if ( is_page( array( 'slug-страницы-или-id', 45 ) ) ) {
return $content; // Если это страница, которую нужно исключить, возвращаем оригинальный контент
}
// Здесь основной код вашей функции
$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;
}
add_filter( 'the_content', 'auto_link_post_titles' );
2. Исключение функции для определенных полей ACF
Теперь давайте добавим условие для исключения этой функции для специфических полей ACF. Вы можете использовать get_field()
и get_post_meta()
для проверки, к какому полю применяется функция:
function auto_link_post_titles( $content ) {
// Проверяем, не находимся ли мы на странице, которую нужно исключить
if ( is_page( array( 'slug-страницы-или-id', 45 ) ) ) {
return $content;
}
// Проверяем, нужно ли нам исключить функцию для конкретных полей ACF
if ( in_array( get_field( 'ваше_поле' ), array( 'исключение_1', 'исключение_2' ) ) ) {
return $content; // Если это поле, которое нужно исключить
}
// Здесь основной код вашей функции
$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;
}
add_filter( 'acf/load_value', 'auto_link_post_titles' );
В этом коде get_field( 'ваше_поле' )
должен быть заменен на название того поля ACF, для которого вы хотите исключить автоматическую ссылку. Замените 'исключение_1'
и 'исключение_2'
на значения, которые будут указывать на поля, для которых вы не хотите, чтобы возникали автоматические ссылки.
Таким образом, вы сможете контролировать, на каких страницах и для каких полей ACF будет применяться ваша функция. Если у вас есть дополнительные вопросы или нужна помощь, не стесняйтесь обращаться!