我想根据多个条件创建一个过滤帖子的页面。
我可以与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中写一些东西以便将值传递到字段中),设置数量结果他们想要归还。
我已经尝试在阳光下搜索所有我想到的,没有骰子。
答案 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语句中添加更多案例以扩展上面的基本示例。
第一段代码会出现在您希望按钮出现的任何位置。第二段代码在第三段之前,在输出结果之前。