Проверьте, задана ли переменная в filter
-
16-10-2019 - |
Вопрос
Благодаря вашим предложениям я включил wp_debug и обнаружил недостатки в моем плагине.У меня есть фильтр для сортировки постов по голосам.Я использую его, когда sort
Параметр URL включен.
add_filter( 'posts_where', 'votes', 10, 2 );
Раньше я получал Undefined index: sort
поэтому я изменил свою функцию, чтобы сначала проверить, установлена ли переменная.
function votes( $where, $query )
{
$sort = array_key_exists('sort', $query->query_vars) ? $_GET['sort'] : null;
if ( isset($sort) ) {
$where .= " AND $sort >= votes";
}
return $where;
}
Это работает нормально, но я не уверен, правильно ли это.Мне интересно, есть ли лучший способ сделать это.
Решение
Переменная, которую вы назвали $query
на самом деле это экземпляр WP_Query, к которому применены фильтры.
Вы можете просто вызвать его функцию get
чтобы получить переменные запроса.
Например:
function votes( $where, $query )
{
$sort = $query->get('sort');
if (!empty($sort)
$where .= " AND $sort >= votes";
return $where;
}
Другие советы
Если вы проверите наличие $query->query_vars
сначала, но затем используйте $_GET['sort']
позже вы просто проверили или использовали неправильную переменную.Я думаю, это просто произошло, когда вы редактировали сценарий.
вы, наверное, хотели написать это:
$sort = array_key_exists('sort', $query->query_vars) ? $query->query_vars['sort'] : null;