使(发布)查询成为可点击的链接

时间:2017-07-23 作者:Pascal Tatipata

<?php 
query_posts( 
    array( 
        \'showposts\'             => $number, 
        \'nopaging\'              => 0, 
        \'download_category\'     => $term->name, 
        \'orderby\'               => \'meta_value_num\',  
        \'meta_key\'              => \'post_views_count\', 
        \'order\'                 => \'DESC\', 
        \'post_type\'             => array( \'download\' ), 
        \'post_status\'           => \'publish\'
    ) 
); 

while ( have_posts() ) : the_post();
?>
此查询所做的是对视图最多的页面进行排序。

现在我想做的是把它变成一个可点击的链接,比如:“大多数视图”。然后,当您单击Most views链接时,页面将根据Most视图进行排序。

编辑:

我真的应该提供更多关于这个问题的信息:我们使用自定义音乐模板和简单的数字下载。http://www.dl-sounds.com

正如您所看到的,有一个小部件带有“最受欢迎”。我提供的代码来自这个小部件。中间有一个盒子,里面有“最新的音频文件”。在此框中,我想添加一个链接,以便访问者可以按大多数视图对音频进行排序。

确切地说,我想在排序栏中添加一个链接(浏览|类型|标记)。排序栏是一个php文件。

我已经对类别进行了一些测试。我使用php类别中的上述查询更改了此查询。

<?php /* Genre Query */ query_posts( array( \'post_type\' => \'download\', \'posts_per_page\' =>\'100000\', \'download_category\' => $term->name ) );while ( have_posts() ) : the_post(); ?>
这很好用。然后,如果我浏览类别,它将按大多数视图自动排序。(试验现场)

2 个回复
SO网友:Johansson

您可以将查询字符串添加到URL,然后在设置了该字符串的情况下更改查询。我要做的是pre_get_posts 修改主查询。

function sort_by_views($query) {
    if ( 
        !is_admin() && 
        $query->is_main_query() &&
        $query->is_home() &&
        isset( $_REQUEST[\'sort_by_views\'] ) 
    ) {
        $query->set( \'post_type\', \'download\');
        $query->set( \'post_status\', \'publish\' );
        $query->set( \'posts_per_page\', $number );
        $query->set( \'nopaging\', false );
        $query->set( \'orderby\', \'meta_value_num\' );
        $query->set( \'meta_key\', \'post_views_count\' );
        $query->set( \'order\', \'DESC\' );
    }
}
add_action( \'pre_get_posts\', \'sort_by_views\' );
现在,如果您导航到http://example.com/?sort_by_views=blabla, 您的帖子将按视图数排序。

此示例适用于主页上的主查询,但您可以根据需要更改条件以满足任何条件。

一个重要注意事项是不要使用query_posts. 使用WP_Query 相反使用query_posts 将更改主查询的数据,这可能会干扰您的内容。

SO网友:ClemC

要仅在用户的单击操作上执行此查询,可以使用URL参数。

在模板中:

$link = get_site_url() . \'?most_views=\' . (string) $param_value;

然后在函数中,可以使用get_query_var() 然后这样做:

function query_most_views() {
    if ( $param_value = get_query_var( \'most_views\', false ) ) {
        // Your query based optionally on your $param_value...
    }
}

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post