1

我正在尝试设置一个drop-down可以按最新到最旧和按字母顺序对我的帖子进行排序。

这是我到目前为止所拥有的:

我声明了一个空变量,然后是一个表单,我可以在其中更改这个空变量的内容。

这部分不起作用

<form method="GET">
  <select name="orderby" id="orderby">
    <option value="<?php echo ($order = 'date'); ?>">Newest to Oldest</option>
    <option value="<?php echo ($order = 'title'); ?>">Alphabetical</option>
    <button type="submit">Apply</button>
  </select>
</form>

并声明我传递变量的查询'orderby' => $order

这部分有效(我正在获取所有帖子的列表并手动更改查询也有效)

$wpb_all_query = new WP_Query(array('post_type'=>'post', 'posts_per_page'=>-1, 'order'=>'ASC', 'orderby'=> $order)); ?>

if ( $wpb_all_query->have_posts() ) :
<ul>


<?php while ( $wpb_all_query->have_posts() ) : $wpb_all_query->the_post(); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>

</ul>
<?php endif;?>

我怎样才能使这项工作?

预先感谢您的帮助!

4

1 回答 1

2

所以你的html表单会是这样的:

<form method="GET">
    <select name="orderby" id="orderby">
      <option value="date">Newest to Oldest</option>
      <option value="title">Alphabetical</option>
    </select>
    <button type="submit">Apply</button>
</form>

然后检查用户使用issetand选择的选项$_GET['orderby']。然后根据返回的值,您可以设置您的自定义查询!因此,您的自定义查询将是这样的:

$custom_orderby = isset($_GET['orderby']) ? sanitize_text_field($_GET['orderby']) : "";

if(!empty($custom_orderby) && "title" == $custom_orderby):
  $custom_query = new WP_Query(array(
    'post_type'=>'post',
    'posts_per_page'=>-1,
    'orderby'=> "title",
    'order'=>'ASC',
    ));
endif;

if(!empty($custom_orderby) && "date" == $custom_orderby):
  $custom_query = new WP_Query(array(
    'post_type'=>'post',
    'posts_per_page'=>-1,
    'orderby'=> "date",
    'order'=>'DESC',
    ));
endif;?>

<ul>

<?php while ( $custom_query->have_posts() ) : $custom_query->the_post(); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>

</ul>
于 2021-04-28T17:47:41.550 回答