Как мне определить, на какой странице загружается ajax_query_attachments_args?

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

Я пытаюсь скрыть вложения с помощью таксономии. Я хочу скрыть их на странице поста в wp-admin. Я не могу понять, как определить, на какой странице я нахожусь из ajax_query_attachments_args. Я пытался использовать pre_get_posts, но, похоже, это не вызывает ajax_query_attachments_args.

add_filter('ajax_query_attachments_args', 'hide_attachment_with_taxonomy', 50, 1);  

function hide_attachment_with_taxonomy( $query = array() ) {
        global $current_screen;

        if ( ! $current_screen ) {
            return $query; // Он всегда возвращает это значение. $current_screen или get_current_screen() всегда неопределены
        }

        if($current_screen->post_type == 'post'){
          $query['tax_query'] = array(
            array(
              'taxonomy' => 'category',
              'operator' => 'NOT EXISTS'
            ),
          ); 

          return $query;
       }
}

Ответ – wp_get_referer(). Эта функция работает внутри ajax_query_attachments_args. Я могу затем использовать get_post_type с ID поста из параметров URL

$referer = parse_url(wp_get_referer());
parse_str($referer['query'], $params);

if (isset($params['post'])){
    $post_type = get_post_type($params['post']);
} else if (strpos($referer['path'], 'post-new.php') !== false && !isset($params['post_type'])){
    $post_type="post";
} else {
    $post_type="";
}

if ( $post_type == 'post' ) {    
    $query['tax_query'] = array(
      array(
          'taxonomy' => 'category',
          'operator' => 'NOT EXISTS'
      ),
    ); 
}

.

Ответ или решение

Как определить, на какой странице загружается ajax_query_attachments_args

Если вам необходимо скрыть вложения с использованием таксономии в административной панели WordPress и убедиться, что это работает именно на странице редактирования поста, вам потребуется корректно определить текущую страницу. Давайте подробно разберем, как это сделать.

Проблема

Вы пытаетесь использовать фильтр ajax_query_attachments_args для изменения параметров запроса вложений в зависимости от страницы, на которой этот запрос выполняется. Однако стандартный способ, такой как pre_get_posts, в данном контексте не срабатывает.

Решение

Ключевым моментом является использование функции wp_get_referer(), которую можно использовать для получения URL-адреса предыдущей страницы. На основе этого URL можно извлечь ID поста и его тип, что позволит вам адаптировать спрос к нужным условиям.

Вот пример того, как это реализовать:

add_filter('ajax_query_attachments_args', 'hide_attachment_with_taxonomy', 50, 1);

function hide_attachment_with_taxonomy( $query = array() ) {
    // Получаем реферер
    $referer = parse_url(wp_get_referer());
    parse_str($referer['query'], $params);

    // Проверяем, установлен ли ID поста
    if (isset($params['post'])) {
        $post_type = get_post_type($params['post']);
    } elseif (strpos($referer['path'], 'post-new.php') !== false && !isset($params['post_type'])) {
        $post_type = "post";
    } else {
        $post_type = "";
    }

    // Применяем фильтр, если тип поста "post"
    if ($post_type == 'post') {    
        $query['tax_query'] = array(
            array(
                'taxonomy' => 'category',
                'operator' => 'NOT EXISTS'
            ),
        ); 
    }

    return $query;
}

Объяснение кода

  1. Получение реферера: Используя wp_get_referer(), мы получаем URL предыдущей страницы и разбираем его с помощью parse_url(), чтобы выделить параметры запроса.

  2. Проверка параметров: Мы проверяем, установлен ли ID поста в реферере. Если он есть, мы определяем тип поста с помощью функции get_post_type().

  3. Условия для фильтрации: Если тип поста соответствует ‘post’ или если пользователь находится на странице создания нового поста (‘post-new.php’), мы добавляем условие в запрос, чтобы скрыть вложения на основе заданной таксономии (‘category’).

Заключение

Вышеописанный подход обеспечивает возможность звукового управления отображением вложений в административной части WordPress, основываясь на контексте текущей страницы. Такой подход не только эффективен, но и гибок, позволяя вам легко вносить изменения в зависимости от ваших требований.

Подобные решения подчеркивают важность правильного понимания работы с таксономиями и AJAX-запросами в WordPress, что в конечном счете улучшает пользовательский опыт администраторов с использованием вашей системы.

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

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