1

我正在尝试在我的 wordpress 网站中插入一个排序选项。我已经让它工作了,但需要帮助正确地使用它和 wordpress 循环。目前,我有:

在页面上,有按字母顺序或时间顺序排序的选项:

<a href="?sort=date">Newest</a>
<a href="?sort=title">Alphabetical</a>

排序代码从这里开始,放置在循环上方:

<?php $sort= $_GET['sort']; 
    if($sort == "title") { $order= "'orderby'=>'title','order'=>ASC'"; } 
    elseif($sort == "date") { $order= "'orderby'=>'date'"; } 
    else{ $order= "'orderby'=>'date','order'=>'DESC'"; } 
?>

注意:我很确定问题出在变量 $order 上面

Wordpress 循环使用变量$order作为参数

<?php $loop = new WP_Query( array( $order, 'post_type' => 'films', 'post_parent' => 0, 'posts_per_page' => -1 ) ); ?>

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

    Wordpress loop stuff here

<?php endwhile; ?>

循环正确显示项目,但排序链接不起作用。这段代码与 query_posts 配合得很好,但我试图让它适用于 WP_Query(上图)。这里有什么想法吗?

更新:这种技术在使用如下 query_posts 时效果很好(但我仍然需要它为 WP_Query 工作):

<?php $sort= $_GET['sort']; 
    if($sort == "title") { $order= "&orderby=title&order=ASC"; } 
    elseif($sort == "date") { $order= "&orderby=date"; } 
    else{ $order= "&orderby=date&order=DESC"; } 
?>

<?php $posts = query_posts($query_string . $order); ?>
<?php if(have_posts()) : while(have_posts()) : the_post(); ?>
       Wordpress Stuff Here
<?php endwhile; ?>
<?php endif; ?>
4

1 回答 1

1

WP_Query期望参数的关联数组 ( array('param' => 'value')),而 query_posts 只接受“查询字符串” ( "param=value&param=value")。您正在混合这两个选项,这就是它不起作用的原因。您需要将$order变量更改为数组而不是字符串,例如:$order = array('orderby' => 'title', 'order' => ASC');.

上面的答案不完整,可能会产生误导。WP_Query文档在这里:https ://codex.wordpress.org/Class_Reference/WP_Query 。这个类接受两种风格,但它们的形式必须有所不同。我不知道该怎么做,因为它不是写在类文档中,但你最好使用数组,所以:

if($sort == "title") { $order = array('orderby' => 'title', 'order' => 'ASC'); } 
elseif($sort == "date") { $order= array('orderby' => 'date'); } 
else{ $order= array('orderby' => 'date', 'order' => 'DESC'); } 

仅供参考,在两种类型之间转换使用函数parse_str(): http: //php.net/manual/en/function.parse-str.phphttp_build_query()http ://www.php.net/manual/en/function.http-build-查询.php

于 2012-06-23T15:37:50.943 回答