Исключение функции для плагина

Вопрос или проблема

У меня есть следующий код:

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, предотвращая возможные конфликты.

Проверьте, чтобы изменения правильно сохранялись. Если когда-либо возникнет необходимость исключить другие плагины, вы можете добавить аналогичные проверки в эту же функцию.

Оцените материал
Добавить комментарий

Капча загружается...