我正在尝试在我的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; ?>
答案 0 :(得分:1)
WP_Query
期望关联的参数数组(array('param' => 'value')
),而query_posts只接受“查询字符串”("param=value¶m=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.php和http_build_query()
:http://www.php.net/manual/en/function.http-build-query.php。