Front End Sorting Questions

时间:2015-11-18 作者:Nimara

请跟我说实话,因为我是自学成才的,并且尽可能多地学习。我将尽可能多地提供我从研究这个问题中学到的信息。

My Goal/The Problem: 允许读者使用可单击的链接或下拉表单对一类帖子进行排序。现在,我们将只使用可点击的链接“按日期排序”和“按标题排序”。我如何做到这一点?这样做的最佳方法是什么?

What I have- The Base: 多亏了Stack Exchange的用户,我才能够在与页面名称匹配的类别中检索帖子页面。如果页面名为Show Rants,那么它将显示类别Show Rants中的所有帖子。这是它的样子(谢谢PeterG)。

这是相关的,因为我想保持按page name=cat name检索帖子的相同格式。

<?php
$args = [
\'category_name\' => get_queried_object()->post_name,
\'order\'         => \'DESC\',
\'orderby\'       => \'date(post_date)\' 
// Add any extra parameters you need
];
$q = new WP_Query( $args ); 


// Run the loop
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
get_template_part( \'content\', get_post_format() );
}
wp_reset_postdata();
}
?>
在上面的示例中,我们使用的是WP\\u Query,这对我来说很重要(主要是对我自己),因为在此之前我一直在使用Query\\u帖子。

后端一种排序类型的结果也是如此。现在,我想在前端执行多个orderby。

以下是我遇到或尝试过的方法:

query_post: 我之前在做一个query\\u posts排序。第一个问题是它是query\\u posts!这周我明白了这绝对不是我想走的路线。WP\\U查询更优越、更安全。这是我的总代码。第二个问题是,它不会从该页面命名的类别中调用帖子(这不是什么问题)

<?php $sort= $_GET[\'sort\'];
if($sort == "title"){
$order= "orderby=title";
}
if($sort == "date"){
$order= "orderby=date";
}
?>

<?php get_header(); ?>

<div class="content-container">

<h2><?php the_title(); ?></h2>

<a href="?sort=title">Sort By Title</a>
<a href="?sort=date">Sort By Date</a>

<?php query_posts($order.\'&order=ASC\');  ?>

<ul>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<li>    <a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>

    <?php endwhile; 
    endif; 
    wp_reset_query();?>
</ul>

</div>
现在,如果我可以在WP\\u查询中得到这个,那么我们就可以全部设置好了。不过我还是很难弄清楚这一点。这就是我下一次的尝试。

WP_Query:Frankensteining上面的两个例子以及我在Codex中学到的知识,我创建了一段不起作用的代码,这并不奇怪。尽管我知道这是绝对错误的,但无论如何我都会把它贴出来,所以不要再嘲笑了。我想知道我是否很接近。

<?php
$args= [
\'category_name\' => \'animoo-reviews\',
\'order\'         => \'DESC\',
\'orderby\'       => \'date(post_date)\'
];
$A = new WP_Query( $args );

while ( $A->have_posts() ) {
$A->the_post();
echo \'<li>\' .get_the_title() .\'</li>\';
}

wp_reset_postdata(); /*instead of wp_reset_query?*/

/* 2nd Query Sort? */
$args2= [
\'category_name\' => \'animoo-reviews\',
\'order\'         => \'ASC\',
\'orderby\'       => \'title\'
 ];

$B = new WP_Query($args2);

// Loop 2?
while( $B->have_posts()) {
$B->the_post();
echo \'<li>\' .get_the_title() .\'</li>\';
}

//Restoring original post data
wp_reset_postdata();
?>
问题是它能工作,但不是我想象的那样,我甚至不知道如何链接它以便用户可以排序。正如我应该猜到的,它将以一种排序顺序弹出前6条帖子,然后以另一种顺序弹出另外6条帖子。更近,但不是真的那么近。

编辑:Woops,我意识到这基本上只是Codex的多回路示例。我尝试将其连接到URL,但没有成功。我就把它放在这里,因为我想表明我至少尝试了一些与问题相关的东西。对于category\\u name,我可以始终使用get\\u queryed\\u object->post\\u name。我之前玩的时候只是在简化它。

add_query_arg: 经过几天的研究,我有几次偶然发现了这个选项。理论上,从人们谈论它的方式来看,这似乎很容易。给出一个URL,该URL将以一种方式对帖子进行排序,另一个URL将以另一种方式对帖子进行排序。我必须操纵这些函数。php文件。在我研究了项目的另一个问题之后,我计划今天解决这个问题。

如果有人能告诉我怎么做,我将不胜感激。我对此很陌生,但事实上,我每天都在学习突飞猛进。有时事情对我来说不像对其他人那样明显(比如抄本上写的东西)。

再一次the goal:

允许读者以多种方式对帖子进行排序。(可选,但将是coolbeans)如果帖子可以来自页面命名的类别。

What I don\'t want:

插件。你可以根据自己的意愿提出一个方便的插件,但我真的需要从头开始学习。任何事情都需要一个插件,这只会在一开始就削弱我的学习能力。

再次感谢您抽出时间。

1 个回复
最合适的回答,由SO网友:Milo 整理而成

orderby 默认值为日期,因此如果我们想按日期订购,则可以将其忽略。所以我们唯一需要检测的是$_GET[\'sort\'] 设置,它等于标题。

在这里,我们为所有查询设置查询参数,只需添加orderby 如果是标题:

$args = array(
    \'category_name\' => get_queried_object()->post_name,
    \'order\'         => \'DESC\'
);

if( isset( $_GET[\'sort\'] ) && "title" == $_GET[\'sort\'] ){
    $args[\'orderby\'] = \'title\';
}

$q = new WP_Query( $args );

相关推荐

Sort posts in a specific way

我目前有6个职位属于“服务”类别。每个服务都有\\u内容和1-2个文档(小册子和/或T&C以及外部表单)现在,假设这6篇文章的ID为1,2,3,4,5,6,但我希望它是2,5,3,1,4,6。这可能吗?如果是,我将如何实现它?