Вопрос

Благодаря вашим предложениям я включил 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top