2011-01-28 3 views
1

J'ai cette requête:

<?php 
    $query= "SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = 'votes' AND wposts.post_status = 'publish' AND wposts.post_type = 'post' ORDER BY CAST(wpostmeta.meta_value AS SIGNED) DESC LIMIT 10"; 
    $posts = $wpdb->get_results($query, OBJECT); 
    if ($posts) : foreach ($posts as $post): 
    setup_postdata($post); 
    ?> 
    // Post here 
    <?php endforeach; endif; ?> 
    <div class="pagination"> 
     <?php wp_pagenavi(); ?> 
    </div> 

J'utilise parce que Wordpress ne peut pas correctement commander meta_values ​​qui utilise des nombres, de toute façon ... tout fonctionne bien sauf que je n'ai aucune idée sur la façon de paginera cela en utilisant wp_pagenavi .

Une idée?

Répondre

1

Bien que je ne le recommanderais pas, vous pouvez essayer de modifier les propriétés de l'objet global $wp_query.

global $wp_query; // shouldn't be required 
$query = "SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta 
    WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = 'votes' 
    AND wposts.post_status = 'publish' AND wposts.post_type = 'post' ORDER BY 
    CAST(wpostmeta.meta_value AS SIGNED) DESC LIMIT 10"; 
$posts = $wpdb->get_results($query, OBJECT); 

$wp_query->posts = $posts; 
$wp_query->is_paged = true; 
$wp_query->current_post = -1; 
// etc etc 

Vous pouvez consulter la définition de la classe WP_Query ou faire un var_dump() ou print_r() sur l'objet de wp_query $ après avoir appelé query_posts.

Bonne chance!

2
global $wp_query; 
// per page 
$ppp = $limit; 
// full found posts , query without limit 
$wp_query->found_posts = count($total); 
// number of pages 
$wp_query->max_num_pages = ceil($wp_query->found_posts/$ppp); 

Cela fonctionne!

5

Remerciez @jaziel Matoso,

Ci-dessous le code approprié:

global $wp_query; 
    $query = "SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta 
     WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = 'votes' 
     AND wposts.post_status = 'publish' AND wposts.post_type = 'post' ORDER BY 
     CAST(wpostmeta.meta_value AS SIGNED) DESC"; 

    $total_record = count($wpdb->get_results($query, ARRAY_A)); 

    $paged  = get_query_var('paged') ? get_query_var('paged') : 1; 
    $post_per_page = get_option('posts_per_page'); 
    $offset   = ($paged - 1)*$post_per_page; 
    $max_num_pages = ceil($total_record/ $post_per_page); 

    $wp_query->found_posts = $total_record; 
    // number of pages 
    $wp_query->max_num_pages = $max_num_pages; 

    $limit_query = " LIMIT ".$post_per_page." OFFSET ".$offset;  

    $result = $wpdb->get_results($query.$limit_query,OBJECT);// return OBJECT 

    if($result): 
    foreach ($result as $post): 
     setup_postdata($post); 
      ?> 
      <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3> 
      <p><?php the_content(); ?></p> 
     <?php 
     endforeach; 
     ?> 
     <div class="navigation"><?php wp_pagenavi(); ?></div> 
     <?php 
    endif; 

Terminé!

-1
<?php 

global $wpdb, $wp_query, $paged; 

$author = isset($_GET['author_name']) ? get_userdatabylogin($author_name) : get_userdata(intval($author)); 
$post_per_page = intval(get_query_var('posts_per_page')); 
query_posts($query_string . '&posts_per_page=' . $post_per_page); 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$offset = ($paged - 1) * $post_per_page; 

$query = "SELECT `wp_postmeta`.*, `wp_posts`.* "; 
$query .= "FROM `wp_postmeta` "; 
$query .= "LEFT JOIN `wp_posts` ON wp_posts.id = wp_postmeta.post_id "; 
$query .= "WHERE `meta_key` = 'autor' AND `post_status` = 'publish' AND `meta_value` = '%s' "; 
$postsQuery = $query . "LIMIT $offset, " . $post_per_page; 

$numRowsQuery = $wpdb->prepare($query, $author->id); 
$allPosts = $wpdb->get_results($numRowsQuery); 
$wp_query->found_posts = $wpdb->num_rows; 
$wp_query->max_num_pages = ceil($wp_query->found_posts/$post_per_page); 

$dataQuery = $wpdb->prepare($postsQuery, $author->id); 
$posts = $wpdb->get_results($dataQuery); 

?> 

<?php if ($posts) : ?> 
    <?php foreach ($posts as $post): ?> 
     <a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a> 
    <?php endforeach; ?> 
<?php endif; ?> 

<?php wp_pagenavi(); ?> 
Questions connexes