Я разрабатываю плагин Wordpress, и мне нужно упорядочить сообщения сайта с пользовательской таблицей, которую я создал с помощью своего плагина.
Я не хочу изменять код в теме, поэтому нашел в кодексе фильтры posts_orderby
и posts_join
(здесь: https://codex.wordpress.org/Custom_Queries).
Пользовательская таблица имеет следующие значения:
ID slug price
и в файле плагина, куда я добавил эти строки:
add_filter('posts_orderby','custom_orderby');
add_filter('posts_join','custom_join');
function custom_join($join){
global $wpdb;
$customTable = $wpdb->prefix.'custom_table';
if(!is_admin()){
$join .= " LEFT JOIN $customTable ON $wpdb->postmeta.meta_value = $customTable.slug";
}
return $join;
}
function custom_orderby($orderby_statement){
global $wpdb;
$customTable = $wpdb->prefix.'custom_table';
if(!is_admin()){
$orderby_statement = "$customTable.price DESC";
}
return $orderby_statement;
}
Когда я обновляю страницу индекса, она выдает мне это сообщение об ошибке:
No Results Found
The page you requested could not be found. Try refining your search, or use the navigation above to locate the post.
Я попытался выполнить запрос непосредственно в моей базе данных с помощью этого кода:
SELECT * FROM wp_posts t1
LEFT JOIN wp_postmeta t2 ON t1.ID = t2.post_id
LEFT JOIN wp_custom_table t3 ON t2.meta_value = t3.slug
ORDER BY t3.price DESC
и это работает.
Итак, в коде, написанном в моем файле плагина, что-то не так, но я не могу понять это.
custom_join()
. Теперь код такой: function custom_join($join){} - person DanieleBiggiogero   schedule 12.04.2013custom_join()
. Теперь код такой: function custom_join($join){ global $wpdb; $customTable = $wpdb-›prefix.'custom_table'; if(!is_admin()){ $join .= ЛЕВОЕ СОЕДИНЕНИЕ wp_postmeta t1 ON wp_posts.ID = t1.post_id; $join .= ЛЕВОЕ СОЕДИНЕНИЕ $customTable t2 ON t1.meta_value = t2.slug; } вернуть $join; } Это работает, но есть другая проблема. Теперь я вижу, что некоторые сообщения дублируются. - person DanieleBiggiogero   schedule 12.04.2013