php
  • wordpress
  • custom-fields
  • 2012-02-22 80 views 2 likes 
    2

    我正在通过名为“size”的自定义元值来订购我的帖子。通过自定义元分页的Wordpress订单发布

    $querystr = " 
        SELECT $wpdb->posts.* 
        FROM $wpdb->posts, $wpdb->postmeta 
        WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
        AND $wpdb->postmeta.meta_key = 'size' 
        AND $wpdb->posts.post_status = 'publish' 
        AND $wpdb->posts.post_type = 'post' 
        AND $wpdb->posts.post_date < NOW() 
        ORDER BY $wpdb->postmeta.meta_value DESC 
    "; 
    
    $pageposts = $wpdb->get_results($querystr, OBJECT); 
    
    if ($pageposts): 
        global $post; 
        foreach ($pageposts as $post):  
        setup_postdata($post);  
         the_title();  
        endforeach;  
    endif; 
    
    wp_pagenavi(); //creates page navigation 
    

    在同一时间我使用WP-pagenavi插件浏览页面的帖子。我在每个页面上有10个职位。

    问题:帖子在每个页面中单独排序。我如何通过所有页面以降序排列帖子?

    更新:我可能已经找到了解决办法,但我不知道如何实现它在我的代码

    http://scribu.net/wordpress/wp-pagenavi/wpn-2-74.html

    $my_query = new WP_Query(array('tag' => 'foo', 'paged' => get_query_var('paged'))); 
    
    while ($my_query->have_posts()) : $my_query->the_post(); 
        the_title(); 
        // more stuff here 
    endwhile; 
    
    wp_pagenavi(array('query' => $my_query)); 
    
    wp_reset_postdata(); // avoid errors further down the page 
    
    +0

    如何以及在何处筛选由页的结果? – 2012-02-22 20:54:38

    +0

    你的意思是'LIMIT'? http://php.about.com/od/mysqlcommands/g/Limit_sql.htm我不完全确定你的意思。 – Sietse 2012-02-22 20:55:42

    +0

    @Artimuz,它由Wordpress中的WP-pagenavi插件 – CyberJunkie 2012-02-22 21:05:36

    回答

    1

    我找到了一个SO后,可以解决你的问题:

    How to sort a 'query_posts' function by custom field, while limiting posts by another custom field

    那里你会找到扩展自定义类并允许您按自定义字段进行查询,并且还包含paged查询变量。

    所以步骤:点击functions.php

    1. 过去class PostsOrderedByMetaQuery代码地方,比如通过替换查询:

      // Retrieve `paged` in URL 
      $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
      
      // Make the query like in WP_Query but with our custom class 
      $query = new PostsOrderedByMetaQuery(array(
          'post_type' => 'post', 
          'post_status' => 'publish', 
          'paged'  => $paged, 
          'orderby_meta_key' => 'size', 
          'orderby_order' => 'DESC'   
      )); 
      
    2. 使用它!

      while ($query->have_posts()) : $query->the_post(); 
          the_title(); 
          // more stuff here 
      endwhile; 
      
      wp_pagenavi(array('query' => $query)); 
      
      wp_reset_postdata(); // avoid errors further down the page 
      
  • +0

    谢谢!代码起作用。我只需删除下面的'filter_where'和'remove_filter'。那些显示较旧的帖子。 – CyberJunkie 2012-02-24 16:26:20

    +0

    我实际上必须删除'add_filter('posts_where','filter_where');'。它导致了一个错误,似乎没有 – CyberJunkie 2012-02-24 16:51:32

    +1

    工作好吧,我编辑了答案 – 2012-02-24 21:33:52

    相关问题