Wordpress add_filter('query_vars', 'my_new_vars'); не работает, как ожидалось

У меня проблема с Wordpress (есть шокер), где он удаляет мой параметр get, который, как я понимаю, является функцией WP для безопасности и по некоторым другим причинам.

Я пытаюсь добиться следующего:

  1. Загрузить страницу продукта
  2. Когда клиент нажимает «Забронировать сейчас», он перенаправляется на форму «Запросить сейчас».
  3. В форме запроса сейчас есть виджет, который извлекает, какой продукт просматривал покупатель, и с помощью параметра GET я могу получить этот продукт.

Я попытался добавить параметр get следующим образом:

# functions.php

function gpd_register_query_vars($vars)
{
    $vars[0] = 'my_product_id';
    return $vars;
}

add_filter('query_vars', 'gpd_register_query_vars');

В моем виджете

class GPD_Get_Product_Widget extends WP_Widget
{
    // ...

    function widget($args, $instance)
    {
        global $wp_query;
        var_dump($wp_query->query_vars['my_super_unique_var']);

        extract($instance);
        //output code
        echo $args['before_widget'];
        include 'widget.php';
        echo $args['after_widget'];
    }
}

//function to register the widget
function gpd_get_product_widget()
{
    register_widget('GPD_Get_Product_Widget');
}

add_action('widgets_init', 'gpd_get_product_widget');

Однако всякий раз, когда я пытаюсь получить параметр, он не существует.

Wordpress не самый простой для навигации или работы. Я действительно озадачен тем, почему WP сделал такую ​​простую вещь, как $_GET params, такой сложной.

Буду признателен за любую оказанную помощь.


person Richard Skinner    schedule 28.11.2020    source источник


Ответы (1)


Я нашел ответ и не совсем уверен, почему это так, но если вы передадите 2 параметра в своем URL-адресе, например /my-page?a=1&b=2, а затем используете старый добрый $_GET, вы обнаружите, что первый элемент - это q, а второй - ваш параметр b .

array(2) {
  'q' =>
  string(29) "/request-a-quote/a=1"
  'b' =>
  integer(1) "2"
}

Похоже, что первый параметр занят q (зарезервированная переменная) Wordpress, а все, что после этого, является вашими дополнительными параметрами (если они не зарезервированы WP).

Итак, если бы я должен был создать свой URL-адрес следующим образом:

add_query_arg(['type' => 'holiday', 'product_id' => 12345], get_permalink($page_id) );

Вы должны добавить первый параметр, который будет игнорироваться, а затем второй будет доступен как $_GET.

Возможно, я делаю что-то не так, но это работает для меня на данный момент. Любая помощь и указания на то, что я делаю неправильно, были бы замечательными, поскольку это кажется неправильным, но работает.

person Richard Skinner    schedule 29.11.2020