让用户在Wordpress中对帖子进行排序

时间:2013-12-10 15:19:11

标签: wordpress sorting loops

我想根据多个条件创建一个过滤帖子的页面。

我可以与wp_query合作并轻松发布帖子,我的问题是我无法弄明白(我也无法在网上找到任何关于此的答案,相信我,我看了)如何让用户这样做

以此为例,按价格(自定义字段元值)的顺序将帖子从最高到最低返回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; ?>

现在,即使在阅读和谷歌搜索之后,如果我能弄清楚如何在前端实现这一点,我会被诅咒,以便用户过滤帖子。

我的意思是,我知道你可以附加到Wordpress中的URL来改变帖子的顺序,但在这种情况下我完全迷失了。

我试过这个,但它不起作用。

<?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中写一些东西以便将值传递到字段中),设置数量结果他们想要归还。

我已经尝试在阳光下搜索所有我想到的,没有骰子。

3 个答案:

答案 0 :(得分:3)

尝试Simple Custom Post Order plugin

它使用AJAX和JavaScript,您不必加载任何其他内容。你必须拖放帖子。

答案 1 :(得分: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>

答案 2 :(得分: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和按钮来添加更多变量,并在switch语句中添加更多案例以扩展上面的基本示例。

第一段代码会出现在您希望按钮出现的任何位置。第二段代码在第三段之前,在输出结果之前。