主页上的分页错误404

时间:2013-03-05 作者:Got The Fever Media

我有一个带有以下代码的博客主页home.php:

<div id="primary">
<div id="content" role="main">
<h2 class="page-title">Featured Products</h2>
<?php 
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
wp_reset_query();
mp_display_products(\'&post_type=product&paged=\' . $paged, $display) ; ?>

<div class="clear index-space"></div>
 </div><!-- #content -->
</div><!-- #primary -->
现在主页运行正常,但是?paged=2抛出错误404。不知道为什么。在产品类别中,分页也很好。

任何帮助都将不胜感激。

EDIT

下面是函数的代码mp_display_products()

function mp_display_products($query = \'\', $display){
 
        wp_reset_query();
 
        //$new_query_wp = new WP_Query($query) ;
        $new_query = query_posts($query) ;
 
 
        wp_simple_pagination(/*array(\'base\' => \'store/products\')*/);   
 
        $i = 1 ;
 
        if($display == \'row\'){
                echo \'<table summary="Display featured products in rows" id="products-list">\' ;
        }
 
        if ( $new_query != \'\' ) : ?>
 
                <?php /* Start the Loop */ ?>
                <?php foreach ($new_query as $post) {
               
                                $sale_price = get_post_meta($post->ID, \'mp_sale_price\', true) ;
                                $sale_price = $sale_price[0] ;
                                $price = get_post_meta($post->ID, \'mp_price\', true) ;
                               
                                //Determines end_price
                                if($sale_price == 0){
 
                                        //End price is normal price
                                        $end_price = \'$\'.$price[0] ;
 
                                }
                                else{
 
                                        //Or end price is  sale price
                                        $end_price = \'$\'.$sale_price ;
                                }
                                //If theres a sale price
                                if($sale_price != 0){
                                       
                                        //We display
                                        $price = \'RRP: <span class="price">$\'.$price[0].\'</span>\' ;
                                       
                                }
                                else{
 
                                        //Or we don\'t
                                        $price = "" ;
                                }
                        ?>
                        <?php //We display each product
 
                        //Let\'s shorten the title string
                        $title = $post->post_title ;
                        $string_size = 25 ;
 
                        //Test if string is longer that string_size
                        if(strlen($title) > $string_size){
 
                                $title = substr($title, 0, $string_size).\'...\' ;
 
                        }
 
                        //Check if we need a grid of a row display
                        if($display == \'grid\'){
 
        //Inventory
        $inventory = get_post_meta($post->ID, \'mp_inventory\', true) ;
 
                        ?>
                <article class="post-<?php echo $post->ID ; ?> product post-product-<?php echo $i ; ?>">
                        <h2><a href="<?php echo get_permalink( $post->ID ) ; ?>" title="View product: <?php echo $post->post_title ; ?>"><?php echo $title ; ?></a></h2>
                       
                        <?php //Test if there is a thumbnail
                        if(has_post_thumbnail($post->ID)){
                               
                                echo \'<div class="image_product">\' ;
                                mp_product_image( $echo = true, $context = \'list\', $post->ID, $size = 200 ) ;
                                echo \'</div><!--end thumbnail-->\' ;
                       
                        }
                        else{
                       
                                echo \'<div class="image_product">
                                <img src="\'.get_template_directory_uri().\'/images/default-product.png" alt="Default image for product" />
                                </div>\' ;
                       
                        }
                        ?>
                        <div class="product-details">
                       
                                <span class="product-old-price"><?php echo $price ; ?></span>
                                <span class="product-detail-link"><a href="<?php echo get_permalink($post->ID) ; ?>">Details</a></span>
                                <span class="product-price"><?php echo $end_price ; ?></span>
                        <?php
 
                        //If inventory isn\'t empty
                        if(!empty($inventory)){
                                mp_buy_button( $echo = true, $context = \'list\', $post_id = $post->ID ) ;
                        }
 
                                ?>
                        </div> 
                </article>
                       
                        <?php
 
                        }//end grid display
                        //Start row
                        else{
 
                                echo \'<tr>
 
                                        <td>\' ;
                                        if(has_post_thumbnail($post->ID)){
                               
                                                echo \'<div class="image_product">\' ;
                                                mp_product_image( $echo = true, $context = \'list\', $post->ID, $size = 88 ) ;
                                                echo \'</div><!--end thumbnail-->\' ;
                                       
                                        }
                                        else{
                                       
                                                echo \'<div class="image_product">
                                                <img src="\'.get_template_directory_uri().\'/images/default-product.png" alt="Default image for product" />
                                                </div>\' ;
                                       
                                        }
 
                                echo \'</td>
                                        <td class="title"><h2><a href="\'.get_permalink( $post->ID ).\'" title="View product: \'.$post->post_title.\'">\'.$post->post_title.\'</a></h2>
                                        <span class="product-detail-link"><a href="\'.get_permalink( $post->ID ).\'">Details</a></span></td>
                                        <td>Customer Rating:\' ;
                                        if(function_exists(\'kk_star_ratings\')) : echo kk_star_ratings($post->ID); endif;
 
                                $comments_count = wp_count_comments( $post->ID );
 
                                echo \'<span class="reviews">Reviews (\'.$comments_count->approved.\')</span></td>
                                        <td class="price"><span class="product-price">\'.$end_price.\'</span>\';
                                        mp_buy_button( $echo = true, $context = \'list\', $post_id = $post->ID ) ;
                                echo \'</td></tr>\' ;
 
                        }
 
 
                        $i++ ;
                       
                        if($i == 4){ $i = 1 ; }
                       
                        ?>     
                <?php }
                        if($display == \'row\'){
                        echo \'</table>\' ;
                }
                ?>
        <?php else : ?>
        <?php endif; ?>
 
        <div class="clear index-space"></div>
        <?php
        wp_simple_pagination(array(\'base\' => \'store/products\'));
}


  

3 个回复
SO网友:Milo

要理解分页时出现404错误的原因,您必须首先了解WordPress在请求页面时所遵循的过程。

在加载模板之前,将解析查询并从数据库中查询结果。在模板中创建新查询时,这些结果与原始查询无关。是否有其他页面以及存在多少页面取决于原始默认主查询,WordPress对模板中的新自定义查询没有“感知”。

因此,解决此问题的方法是在通过pre_get_posts 行动而不是呼叫query_posts 在模板中。

function wpa89392_homepage_products( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'post_type\', array( \'product\' ) );
    }
}
add_action( \'pre_get_posts\', \'wpa89392_homepage_products\' );

SO网友:tfrommen

更改设置变量$paged的行,如下所示:

$paged = (get_query_var(\'page\')) ? get_query_var(\'page\') : 1;

也许做一个wp_reset_query(); 在所提到的行之前(取决于主题中的其他内容)。

// Edit

以下是我所做的(以及有效的):

$paged = (get_query_var(\'page\')) ? get_query_var(\'page\') : 1;
$args = array (
    \'category_name\' =>\'news\',
    \'posts_per_page\' => 5,
    \'paged\'=>$paged,
); 
query_posts($args);
while (have_posts()) : the_post();
    the_title(); echo \' &mdash; \'; the_content();
endwhile;
两者都有?page=2/2 附加到URL上,导致出现第二页。也许你可以给出你用来测试的确切代码?

SO网友:Behzad G.

主页不是页面模板,因此您应该更改get_query_var(\'paged\')get_query_var(\'page\')

$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;

$paged = (get_query_var(\'page\')) ? get_query_var(\'page\') : 1;

结束

相关推荐

Gallery Pagination by Row

我在以下位置创建了一个图片库:http://ellenandjosh.com/?page_id=5. 目前,我有一个循环,在一定数量的图像之后显示分页:http://pastebin.com/N6nRRUei.通常情况下,这很好。。。但通常我没有不同宽度的图像。WordPress按高度裁剪图像,宽度可变。我想做的是在三行图像之后,然后添加分页按钮。。。而不是在一定数量的图像后显示分页按钮。。。这可能吗?第1页还可以,虽然底部行中可能会有更多图像-第2页只有两行,第3页第三行只有一个图像-尽管有更多图像。。