更正自定义WP循环的PHP语法

时间:2012-06-23 14:56:51

标签: php wordpress variables loops

我正在尝试在我的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(上图)。这里有什么想法吗?

UPDATE :使用如下所示的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; ?>

1 个答案:

答案 0 :(得分: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-query.php