Ошибка SQL с пользовательским запросом
Вопрос
Я пытаюсь создать пользовательский запрос Post для сортировки постов, которые были признаны «Thumbs Up».
Я присоединяюсь к своей пользовательской таблице "WP_POST_VOTES" (в которой хранится количество голосов, полученных в каждом сообщении) с таблицей по умолчанию "WP_POSTS" и отображаю сообщения WHERE votes > 1
.
Причина вызывает ошибку SQL. Когда я удаляю posts_where
Фильтр У меня нет ошибок, но все мои сообщения отображаются независимо от их номера голосования.
add_filter('posts_join', 'vote_join' );
add_filter('posts_where', 'vote_where' );
function vp_join( $join )
{
global $wpdb;
if (isset($_GET['vote_sort'])) { //when visitor browses voted posts
$join .= " LEFT JOIN wp_post_votes ON " .
$wpdb->posts . ".ID = wp_vote_posts.vote_post_id ";
}
return $join;
}
function vp_where( $where )
{
if (isset($_GET['vp_sort'])) {
$where = "voted > 1";
}
return $where;
}
//custom permalinks code follows...
Ошибка SQL, которую я получаю в индексе ...
Ошибка базы данных WordPress: [] Выберите t., тт От wp_terms как tnner quint wp_termersomony as tt на tt.term_id = t.term_id inner gin gin wp_term_relationships как tr на tr.term_taxonomy_id = tt.termer_taxonomy_id, где tt.taxonomy в ('категория') и tr.object_id в (0) по заказу t.name asc
.. и в моей боковой панели у меня есть недавний виджет постов. В этом я получаю $wpdb->show_errors();
Ошибка базы данных WordPress: [у вас есть ошибка в вашем синтаксисе SQL; Проверьте руководство, которое соответствует вашей версии MySQL Server для правого синтаксиса для использования почти «Голосовал> 1 Заказ по WP_POSTS.POST_DATE DECS LILM = wp_vote_posts.vote_post_id, где 1 = 1 проголосовал> 1 заказ по WP_POSTS.POST_DATE DECS LIMIT 0, 5
я отметил WHERE 1=1 voted > 1
.. не уверен, что это вызывает ошибку и как ее исправить.
Решение
Должно быть:
$where .= " AND voted > 1";
Другие примечания:
Вместо имен таблиц в твердом кодировании вы должны использовать
$wpdb->prefix . 'post_votes'
;Вместо того, чтобы проверять в глобальном
$_GET
Вы должны объявить свои фильтры как принятие двух аргументов и кодовых функций соответственно, эти фильтры проходят как второй объект аргумента, который содержит все данные запроса.
Нравиться:
add_filter('posts_where', 'vote_where', 10, 2 );
function vote_where( $where, $query ) {
if( isset( $query->query_vars['vp_sort'] ) );
$where .= ' AND voted > 1';
return $where;
}