代码之家  ›  专栏  ›  技术社区  ›  anon

如何按视图、评论、评级等对文章进行排序WordPress

  •  1
  • anon  · 技术社区  · 14 年前

    伙计们,我需要一种方法来对我的帖子按视图、评级和评论进行分类。我搜索了很多插件,但它们都是小车。

    我想要这样的东西。 sorting http://img138.imageshack.us/img138/2577/sorting.png

    2 回复  |  直到 13 年前
        1
  •  4
  •   Stephen Harris    13 年前

    为了分离不同的排序方式,您可以使用jquery之类的工具来创建一个选项卡区域,在每个选项卡区域内,您都调用一个不同的(php)函数来对文章进行相应的排序,然后在function.php文件中定义这些php函数。

    至于功能-WordPress已经在一篇文章上存储了评论的数量-但是你需要让它存储页面查看/评级。首先, WP后视图 会很好的-我们只需要一些东西来存储数据。它附带了专门的功能,可以根据流行程度来获取文章,您可以使用这些功能,但如果您希望获得更大的灵活性,我在下面提供了按视图数或评论数排序的功能:

    按注释排序:

    function get_most_commented($limit=10) {
        global $wpdb;
    
       $most_commented = $wpdb->get_results("SELECT comment_count, ID, post_title FROM $wpdb->posts WHERE post_type='post' AND post_status = 'publish' ORDER BY comment_count DESC LIMIT 0 , $limit");
    
        foreach ($most_commented as $post) {
            setup_postdata($post);
            $id = $post->ID;
            $post_title = $post->post_title;
            $count = $post->comment_count;
            $output .= '<li><a href="'. get_permalink($id).'">'.$post_title. '</a> </li>';
        }
        return $output;
    }
    

    用于按Post视图排序

    function get_most_visited($limit=10) {
        global $wpdb;
    
        $most_viewed = $wpdb->get_results("SELECT DISTINCT $wpdb->posts.*, (meta_value+0) AS views FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON $wpdb->postmeta.post_id = $wpdb->posts.ID WHERE post_type='post' AND post_date < '".current_time('mysql')."' AND post_status = 'publish' AND meta_key = 'views' AND post_password = '' ORDER BY views DESC LIMIT $limit");
    
    
        foreach ($most_viewed as $post) {
                $id = $post->ID;
                $post_views = intval($post->views);
                $post_title = get_the_title($post);
                $post_title = $post->post_title;
                 $output .= '<li><a href="'. get_permalink($id).'">'.$post_title. '</a>
         }
    
        return $output;
    }
    

    然后只包括这些功能: get_most_visited() get_most_commented() (带有可选的posts数参数-默认值为10)inside <ul> <ol> 标签。(我已经包括了如何检索评论/视图的数量,以防您想使用它们-否则您可以删除它们)

    这种方法在如何呈现文章方面给了您很大的灵活性。基本上,这可以让您轻松地使用一些基本的CSS样式或一些涉及jquery的更高级的样式来设置列表的样式。

    至于post-ratings,像post-star-ratings这样的插件可能会使用存储分级的技巧,然后您可以使用与上面类似的函数。

    希望这有帮助!

        2
  •  1
  •   st4ck0v3rfl0w    14 年前

    你必须在WordPress中编写自己的定制查询。这包括熟悉PHP和一些WordPressAPI。

    一个好的起点: http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query

    至于您想要排序的方式,首先需要捕获视图和评级。我的直觉告诉你可以把所有的东西都存储在自定义字段中——所以要熟悉post_元表。以下是我的一些想法:

    最常查看:在single.php中,每次加载日志时,请确保添加了一个递增的自定义字段-按查询顺序使用此自定义字段。