2013-12-10 7 views
6

Я хотел бы создать страницу для фильтрации сообщений по ряду критериев.Позвольте пользователям сортировать сообщения в Wordpress

Я могу работать с wp_query и доставлять сообщения довольно легко, моя проблема в том, что я не могу понять (и я не могу найти ответы на них по этому поводу, поверьте мне, я посмотрел), как позволить пользователям сделать это.

Возьмите это, например, возвращает сообщения в порядке цены (настраиваемое поле meta value) от наивысшего до самого низкого с 33 сообщениями.

<?php 

$featuredPosts = new WP_Query(array(
'posts_per_page' => 33, 
    'meta_key'=>'Price', 
    'orderby' => 'meta_value_num', 
    'order' => DESC 
)); 

?> 

<?php if ($featuredPosts->have_posts()) : ?> 

<?php while ($featuredPosts->have_posts()) : $featuredPosts->the_post(); ?> 

<article <?php post_class('item-post block'); ?> id="post-<?php the_ID(); ?>"> 
<h2 class="price-title"><?php the_title(); ?> </h2> 

</article> <!-- end div post --> 

<?php endwhile; wp_reset_query(); ?> 

<?php endif; ?> 

Теперь, даже после прочтения и прибегая к помощи, будь я проклят, если я могу понять, как я бы это реализовать на переднем конце для пользователей, чтобы фильтровать сообщения.

Я имею в виду, я знаю, что вы можете добавить URL-адреса в Wordpress, чтобы изменить порядок сообщений, но в этом контексте я полностью потерян.

Я пробовал это, но он не работает.

<?php 

$by_price = esc_url(add_query_arg(array(
    'meta_key' => 'price', 
    'orderby' => 'meta_value_num', 
    'order' => ASC 
))); 
$by_date = esc_url(add_query_arg(array(
    'orderby' => 'date', 
    'order' => DESC 
))); 

?> 

<ul> 
    <li><a href="<?php echo $by_price;?>">Order by price</a></li> 
    <li><a href="<?php echo $by_date;?>">Order by date</a></li> 
</ul> 

То, что я пытаюсь достичь на самом деле довольно просто, как хорошо, позволить пользователю выбрать категорию, выбрать диапазон цен (угадывание я бы написал что-то в JQuery, чтобы поставить значение в поле), установите количество результатов, которые они хотели бы вернуть.

Я пробовал поиск в Интернете все под солнцем Я могу думать об этом, без кубиков.

ответ

0

ОК, я обновить код, чтобы понять:

--- Я не думаю, что meta_key будет автоматически пикап ---

functions.php

... 

    $whitList = array(
     'price' => array(
     'posts_per_page' => 33, 
     'meta_key'=>'price', 
     'orderby'=>'meta_value_num', 
     'order' => ASC 
     ), 
     'date' => array(
     'posts_per_page' => 33, 
     'orderby'=>'date', 
     'order' => DESC 
     ) 
    ); 
... 

Ваш первый цикл PHP:

<?php 

gloabl $whitList; //to use the $whitList in your functions.php. 

$aryQuery = $whitList[$_REQUEST['orderby']] ? $whitList[$_REQUEST['orderby']] : $whitList['price']; 

$featuredPosts = new WP_Query($aryQuery); 

.... 
.... 
?> 

Для списка на странице:

<ul> 
<?php 
    gloabl $whitList; //to use the $whitList in your functions.php. 
    foreach($whitList as $orderby => $aryOrderBySettings){ 
     ?> 
     <li> <a href="<?php echo esc_url(add_query_arg('orderby', $orderby));?>">Order by <?php echo $orderby;?></a></li> 
     <?php 
    } 
?> 
</ul> 
+0

Должна ли вторая часть находиться внутри петли? – andy

+0

Нет, не в петле – Zac

+0

Если я не поставил вторую часть внутри цикла из первой части, она никогда не появляется на странице. – andy

3

Пробег: Simple Custom Post Order plugin.

Он использует AJAX и JavaScript, вам не нужно ничего загружать. Вам нужно просто перетащить сообщения.

+0

Это для фильтрации бэкэнда, а не того, чего хотел OP. – phpheini

0

Использование параметров $_GET - путь сюда. Прежде всего, вы хотите, чтобы ваши посетители обращались к ним, добавьте эти переменные. В общем, подход ссылки очень хорош, поэтому мы можем генерировать дополнительные ссылки, используя add_query_arg, чтобы использовать дополнительные параметры для текущего URL.

<?php 
    $urla = add_query_arg('sort' => 'price', 'asc' => '1'); 
    $urld = add_query_arg('sort' => 'price', 'asc' => '0'); 
?> 
<a href="<?php echo esc_url($url); ?>">Sort by price (asc)</a> 
<a href="<?php echo esc_url($url); ?>">Sort by price (desc)</a> 

При щелчке пристегивается переменными, таким образом, может быть обнаружен:

<?php 
    // Get an allowed sort variable and the order 
    $sort = isset($_GET['sort']) && in_array($_GET['sort'], array('price'))) 
      ? $_GET['sort'] : null; 
    $order = isset($_GET['asc']) && $_GET['asc'] == '0' ? 'DESC' : 'ASC'; 
?> 

Теперь вы бы увеличить ваш основной запрос с данными, вы просто извлеченными. Если вы используете стандартный способ запроса сообщений на странице, вы должны уйти с query_posts, хотя это not recomended.И, если вы используете пользовательский цикл, просто вводят новые аргументы в него:

<?php 
    $args = array(); 
    switch ($sort): 
     case 'price': 
      $args['order'] = $order; 
      $args['orderby'] = 'meta_value_num'; 
      $args['meta_key'] = 'price'; 
      break; 
     default: 
      break; 
    endswitch; 

    $defaults = array('posts_per_page' => 33); 
    $query = new WP_Query(wp_parse_args($args, $defaults)); 
?> 

Вы можете добавить больше переменных, создавая больше URL-адреса и кнопки нажимаются, и больше дел в заявлении выключателя продлить основной пример выше.

Первый фрагмент кода будет размещаться везде, где вы хотите, чтобы ваши кнопки отображались. Второй фрагмент кода идет до третьего, который идет до вывода результатов.

Смежные вопросы