не получается реализовать сортировку постов в WordPress по custom fields

vitvirtual
На сайте с 18.10.2007
Offline
248
1752

Друзья, знатоки php и WordPress, помогите решить проблему. Я разрабатывал сайт на WP по заказу. В условиях было указано, чтобы была настроена сортировка постов по цене в некоторых (не всех) рубриках, некоего подобия сортировки удалось достичь при помощи плагина:

<?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

некто мне предложил такое решение:


попробуй заменить
$x->query_vars['orderby'] = 'meta_value';
на
$x->query_vars['orderby'] = 'lpad(meta_value, 20, \'0\')';

не сработало, другой человек указал на топик с вариантом решения данной проблемы на официальных форумах WP: http://wordpress.org/support/topic/277454

Я попытался применить эту конструкцию с учетом того, что записи из нужных рубрик у меня выводятся в отдельных шаблонах, я в таком шаблоне указал:

query_posts('cat=categoryID&meta_key=price&orderby=m
eta_value_number&order=DESC&showposts='.$limit.'&pag
ed=' . $paged);

(это-то точно должно работать!)

а в собственный файл WP /wp-includes/query.php после позиции 2240 (У меня WP 2.7) вставил это:

if (strpos($orderby,'meta_value')) {$orderby = str_replace('meta_value','meta_value+0',$orderby);}
else {}

Но оно не сработало :(

Кто-нибудь может помочь решить проблему? URL сайта могу сбросить в личку! Решение где-то рядом, но мне не додуматься...

www.King-Servers.com - Dedicated Servers от 65$, VDS от 25$ / VPN - Open, Pptp, Double. Http proxy - http://secretsline.biz
mgarkunov
На сайте с 23.03.2009
Offline
130
#1
vitvirtual:
if(is_category('category1','category2', 'category...')) {

Так нельзя, нужно

if(is_category('category1') OR is_category('category2')) {

в остальном код рабочий.

vitvirtual
На сайте с 18.10.2007
Offline
248
#2

mgarkunov, спасибо за подсказку :) а решилась проблема таким образом, плагин я изменил так:

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 по адресу http://wordpress.org/support/topic/277454

mgarkunov
На сайте с 23.03.2009
Offline
130
#3
vitvirtual:
Это работает только в WP 2.7, если у вас более свежая версия WP, то плагин сортировки по цене будет работать, а файл /wp-includes/query.php нужно модифицировать по-другому, так как описано в топике на официальном форуме WP по адресу http://wordpress.org/support/topic/277454

У меня все работает без исправления основных файлов. Надо просто добавить код в functions.php темы и все работает нормально.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий