|
|
vitvirtual виртуальный |
Зарегистрирован: 11.06.2007
Сообщений: 9061
|
Обратиться по нику
|
vitvirtual |
Ответить с цитатой | | |
|
Возникла проблема: есть плагин для WordPress для сортировки постов в определенных рубриках по значению определенного произвольного поля. Это произвольное поле цифровое. Сортировка происходит в порядке уменьшения , то есть сперва должны отображаться б'ольшие значения, а ниже меньшие.
Вот код плагина:
Код: |
<?php
/*
Plugin Name: sort by custom field
Plugin URI:
Description:
Author:
Version:
Author URI:
*/
add_action('pre_get_posts','sort_categories_by_price');
function sort_categories_by_price($x) {
if(is_category('category1','category2', 'category...')) {
$x->query_vars['orderby'] = 'meta_value';
$x->query_vars['order'] = 'DESC';
$x->query_vars['meta_key'] = 'price';
}
}
?>
|
Плагин сортирует, но неправильно, то есть по коду, представленному выше он сортирует так:
800000
750000
600000
3800000
3300000
2800000
2100000
1400000
1150000
а должен сортировать так:
3800000
3300000
2800000
2100000
1400000
1150000
800000
750000
600000
кто-нибудь может подсказать решение проблемы? |
|
|
|
|
|
www.King-Servers.com - Dedicated Servers от 65$, VDS от 25$ |
Tomas-R + + V.I.P. |
Зарегистрирован: 07.01.2008
Сообщений: 5567
|
Обратиться по нику
|
Tomas-R + + |
Ответить с цитатой | | |
|
т.е. он сортирует по первой цифре, а не по всему значению
попробуй писать цифры в едином формате кол-ва знаков |
|
|
|
|
|
рекламная подпись (в PM) |
vitvirtual виртуальный |
Зарегистрирован: 11.06.2007
Сообщений: 9061
|
Обратиться по нику
|
vitvirtual |
Ответить с цитатой | | |
|
Tomas-R, так я и пишу в произвольное поле полное число без пробелов, или нужно как-то по-другому? |
|
|
|
|
|
www.King-Servers.com - Dedicated Servers от 65$, VDS от 25$ |
Kerk Профессионал |
Зарегистрирован: 30.09.2007
Сообщений: 550
|
Обратиться по нику
|
Kerk |
Ответить с цитатой | | |
|
vitvirtual писал(а): |
Tomas-R, так я и пишу в произвольное поле полное число без пробелов, или нужно как-то по-другому?
|
Поле строковое. Потому сортируется как строка, а не число.
3800000
3300000
2800000
2100000
1400000
1150000
0800000
0750000
0600000
Либо попробуй заменить
$x->query_vars['orderby'] = 'meta_value';
на
$x->query_vars['orderby'] = 'lpad(meta_value, 20, \'0\')'; |
|
|
|
|
|
Я — лучший программист, хочу поработать |
vitvirtual виртуальный |
Зарегистрирован: 11.06.2007
Сообщений: 9061
|
Обратиться по нику
|
vitvirtual |
Ответить с цитатой | | |
|
нет, не работает эта конструкция
если поставить с этой конструкцией order = DESC то сортирует так:
600000
1400000
3300000
1150000
750000
2100000
а если поставить order = ASC то так:
1000000
3800000
2800000
800000
и т.д. |
|
Последний раз редактировалось: vitvirtual (Вс Янв 31, 2010 7:12 pm), всего редактировалось 1 раз |
|
|
|
|
www.King-Servers.com - Dedicated Servers от 65$, VDS от 25$ |
Kerk Профессионал |
Зарегистрирован: 30.09.2007
Сообщений: 550
|
Обратиться по нику
|
Kerk |
Ответить с цитатой | | |
|
vitvirtual писал(а): |
нет, не работает эта конструкция
|
А что говорит? Вообще все валится или просто неправильно сортирует?
Мне сейчас негде проверить. |
|
|
|
|
|
Я — лучший программист, хочу поработать |
vitvirtual виртуальный |
Зарегистрирован: 11.06.2007
Сообщений: 9061
|
Обратиться по нику
|
|
|
www.King-Servers.com - Dedicated Servers от 65$, VDS от 25$ |
Taburetkin Гуру |
Зарегистрирован: 25.02.2007
Сообщений: 1426
|
Обратиться по нику
|
|
|
|
vitvirtual виртуальный |
Зарегистрирован: 11.06.2007
Сообщений: 9061
|
Обратиться по нику
|
vitvirtual |
Ответить с цитатой | | |
|
Taburetkin, спасибо, ты как всегда на высоте
но в моем проблема еще вот в чем, в программировании я дуб дубом, мне надо "разжевать все и положить в рот"
Вот, что я сделал, я взял и в шаблоне страницы подредактировал строчку:
Код: |
query_posts('cat=categoryID&meta_key=price&orderby=meta_value_number&order=DESC&showposts='.$limit.'&paged=' . $paged);
|
оно так должно работать, я нутром чувствую...
далее в собственный файл WP /wp-includes/query.php после позиции 2240 (У меня WP 2.7 с переводом Лекактуса) добавил строчку:
Код: |
if (strpos($orderby,'meta_value') && $q['meta_key'] == 'price') {$orderby = str_replace('meta_value','meta_value+0',$orderby);} else {}
|
и ведь не работает ни хрена , а Stepasyuk по этой ссылке тему говорит! |
|
|
|
|
|
www.King-Servers.com - Dedicated Servers от 65$, VDS от 25$ |
vitvirtual виртуальный |
Зарегистрирован: 11.06.2007
Сообщений: 9061
|
Обратиться по нику
|
vitvirtual |
Ответить с цитатой | | |
|
В общем решилась проблема таким образом, на меня как будто озарение нашло , плагин я изменил так:
Код: |
add_action('pre_get_posts','sort_categories_by_price');
function sort_categories_by_price($x) {
if(is_category('category1') OR is_category('category2') OR is_category('...')) {
$x->query_vars['orderby'] = 'meta_value';
$x->query_vars['order'] = 'DESC';
$x->query_vars['meta_key'] = 'price';
}
}
?>
|
а в файл WP /wp-includes/query.php после позиции 2240 добавил строчку:
Код: |
if (strpos($orderby,'meta_value') && $q['meta_key'] == 'price') {$orderby = str_replace('meta_value','meta_value+0',$orderby);}
else {}
|
И все заработало!
Это работает только в WP 2.7, если у вас более свежая версия WP, то плагин сортировки по цене будет работать, а файл /wp-includes/query.php нужно модифицировать по-другому, так как описано в топике на официальном форуме WP по адресу, который выше указал Taburetkin |
|
|
|
|
|
www.King-Servers.com - Dedicated Servers от 65$, VDS от 25$ |
|