Чтобы совершить круговую поездку «Путь WordPress» на «front-end» (не работает в контексте wp-admin
), вам нужно использовать 3 функции WordPress:
- add_query_arg () - чтобы создать URL с новой переменной запроса (в вашем примере 'c')
- фильтр query_vars - для изменения списка общедоступных переменных запроса , о которых знает WordPress (это работает только во внешнем интерфейсе, поскольку запрос WP не используется в back end -
wp-admin
- так что это также не будет доступно в admin-ajax
)
- get_query_var () - чтобы получить значение переменной пользовательского запроса, переданной в вашем URL.
Примечание: нет необходимости даже прикасаться к суперглобалам ($_GET
), если вы делаете это таким образом.
Пример
На странице, где необходимо создать ссылку / задать переменную запроса:
если это ссылка на эту страницу, просто добавьте переменную запроса
<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c ) )?>">
если это ссылка на какую-то другую страницу
<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c, site_url( '/some_other_page/' ) ) )?>">
В вашем файле functions.php или в каком-либо файле плагина или в пользовательском классе (только интерфейс):
function add_custom_query_var( $vars ){
$vars[] = "c";
return $vars;
}
add_filter( 'query_vars', 'add_custom_query_var' );
На странице / функции, где вы хотите получить и работать с запросом var, установленным в вашем URL:
$my_c = get_query_var( 'c' );
На задней панели (wp-admin
)
На сервере мы никогда не запускаем wp()
, поэтому основной запрос WP не запускается. В результате нет query vars
, а хук query_vars
не запускается.
В этом случае вам необходимо вернуться к более стандартному подходу проверки вашего $_GET
суперглобального. Вероятно, лучший способ сделать это:
$my_c = filter_input( INPUT_GET, "c", FILTER_SANITIZE_STRING );
хотя в крайнем случае вы могли бы сделать проверенное и верное
$my_c = isset( $_GET['c'] ? $_GET['c'] : "";
или некоторый его вариант.