2012-12-07 117 views
4

我嘗試了多種解決方案,但它不工作。Wordpress分頁不起作用

當我轉到/ page/2時,它不起作用。

我在我的主題的index.php中執行自定義查詢。

if (get_query_var('paged')) { 
    $paged = get_query_var('paged'); 
} elseif (get_query_var('page')) { 
    $paged = get_query_var('page'); 
} else { 
    $paged = 1; 
} 

$args = array(
    'post_type' => array('post', 'music', 'videos'), 
    'post_status' => 'publish', 
    //'meta_key' => 'featured', 
    //'meta_value' => '1', 
    'posts_per_page' => 10, 
    'orderby'=>'date', 
    'order'=>'DESC', 
    'paged' => $paged 
); 

query_posts($args); 

這裏是鏈接到我的網站:Home Page of my Site

本頁面無法正常工作(投擲404) -

剛剛意識到這一點 - Page which is not working(mywebsite /頁/ 2 /格式)第2頁的作品 - Page which is working(的格式 - mywebsite.com/?page=2)

+0

wordpress.se會遍佈這個問題,我認爲 – John

+0

我嘗試了多種解決方案,但它不工作。 – dang

+1

wordpress.stackexchange.com是一個這樣的網站,但專門針對WordPress的問題。除此之外,他們什麼都不做,但如果你在這裏沒有得到足夠的答案,那就試試吧。 – John

回答

3

我有時無法讓分頁正常工作。嘗試使用下面的查詢,看看是否有幫助。我剛剛添加了一行代碼,並將您的查詢更改爲不使用$args變量。

<?php 

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

query_posts(array(
    'post_type' => array(
     'post', 
     'music', 
     'videos', 
    ), 
    'post_status' => 'publish',, 
    'posts_per_page' => 10, 
    'orderby'=>'date', 
    'order'=>'DESC', 
    'paged' => $paged) 
); 

if (have_posts()) : while (have_posts()) : the_post(); 

?> 

    // Display your content here  

    <?php the_title ?> 

    <?php the_content(); ?> 

<?php endwhile; endif; ?> 
+0

謝謝,我試了一下。但它不起作用。 – dang

+0

你有超過10個帖子嗎?你是否包含頁面導航鏈接? – AndyWarren

+0

是的,我有超過10個職位,我包括頁面導航鏈接。 – dang

16

我遇到了同樣的問題,這一切都爲我解決了。這允許我分頁index.php以及我的page.php與漂亮的固定鏈接。

HTML/PHP:

<?php 
    //Fix homepage pagination 
    if (get_query_var('paged')) { $paged = get_query_var('paged'); } else if (get_query_var('page')) {$paged = get_query_var('page'); } else {$paged = 1; } 

    $temp = $wp_query; // re-sets query 
    $wp_query = null; // re-sets query 
    $args = array('post_type' => array('post', 'music', 'videos'), 'orderby'=>'date', 'order'=>'DESC', 'posts_per_page' => 10, 'paged' => $paged); 
    $wp_query = new WP_Query(); 
    $wp_query->query($args); 
    while ($wp_query->have_posts()) : $wp_query->the_post(); 
?> 

<!--your loop stuff here --> 

<?php endwhile; ?> 
<nav> 
    <?php paginate(); ?> 
    $wp_query = null; 
    $wp_query = $temp; // Reset 
</nav> 

這樣幾件事情。一個它檢查你的家庭,網頁或單身,並告訴$ paged變量如何反過來反應。它還允許您使用自定義帖子類型查詢您的分頁。另外通過不使用query_post,你可以避免使用它時有時得到的一些非常時髦的東西。 paginate();是我們在現在帶來一個自定義函數:

裏面你的functions.php

function paginate() { 
global $wp_query, $wp_rewrite; 
$wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1; 

$pagination = array(
    'base' => @add_query_arg('page','%#%'), 
    'format' => '', 
    'total' => $wp_query->max_num_pages, 
    'current' => $current, 
    'show_all' => true, 
    'type' => 'list', 
    'next_text' => '&raquo;', 
    'prev_text' => '&laquo;' 
    ); 

if($wp_rewrite->using_permalinks()) 
    $pagination['base'] = user_trailingslashit(trailingslashit(remove_query_arg('page', get_pagenum_link(1))) . '?page=%#%/', 'paged'); 

if(!empty($wp_query->query_vars['s'])) 
    $pagination['add_args'] = array('s' => get_query_var('s')); 

echo paginate_links($pagination); 
} 

這最初來自http://bavotasan.com/2011/simple-pagination-for-wordpress/我稍微改裝它來獲得分頁到主頁上的工作。

這又一次做了幾件事。它爲您的頁面分頁,每個頁面都有自己的鏈接(我覺得很好),並且它還重寫了URL以允許使用漂亮的固定鏈接。如果你檢查鏈接,這個變量的's'被用來代替'paged'。我用'分頁'取代了's',並且所有的東西在我的最後都很完美。分頁

ul.page-numbers { 
    margin: 20px 0 10px; 
    width: 100%; 
    padding: 0; 
    font-size: 12px; 
    line-height: normal; 
    clear: both; 
    float: left; 
} 

ul.page-numbers li { 
     float: left; 
    } 

ul.page-numbers a, 
ul.page-numbers span { 
    border-radius: 3px; 
    -moz-border-radius: 3px; 
    -webkit-border-radius: 3px; 
    background: -webkit-gradient(linear, left top, left bottom, from(#E4E3E3), to(#FFFFFF)); 
    background: -moz-linear-gradient(top, #E4E3E3, #FFFFFF); 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#E4E3E3', endColorstr='#FFFFFF'); 
    padding: 3px 4px 2px 4px; 
    margin: 2px; 
    text-decoration: none; 
    border: 1px solid #ccc; 
    color: #666; 
} 

ul.page-numbers a:hover, 
ul.page-numbers span.current { 
    border: 1px solid #666; 
    color: #444; 
} 

編輯

可選擇定型,我意識到事後說首頁分頁會點擊頁面標籤之一後打破。我通過替換條件語句並將其置於原來的位置解決了這個問題。我也更新了我的代碼。

$pagination['base'] = user_trailingslashit(trailingslashit(remove_query_arg('page', get_pagenum_link(1))) . '?page=%#%/', 'paged'); 
+1

+1真棒!!!!!!這是完美的答案!它在WP 3.5+上完美運行。謝謝TONNNNNNN! – Devner

0

我一直在這個問題有一段時間了掙扎,它把我們的WordPress沒有設置必要的領域之一,對我來說,max_num_pages

所以我在循環內設置了這個變量。這是我的示例代碼。

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$args = array('post_type' => 'cpt', 'paged'=>$paged, 'posts_per_page' => 3); 
$loop = new WP_Query($args); 
$GLOBALS['wp_query']->max_num_pages = $loop->max_num_pages; // This is the line that did the magic for me. 

經過進一步閱讀,我發現了這一點;

  1. 在single.php中,singular.php和其他單一視圖模板:(int) $page是後的頁面,通過查詢VAR頁面中指定:get_query_var('page');
  2. 在各種各樣的archive.php和類似的存檔/帖子類型列表視圖模板:(int) $paged是全局變量包含帖子列表的頁碼(如在檔案中)。

這意味着如果你在一個頁面模板(這是一個單一的視圖模板)並且正在使用一個循環,你將需要設置這個變量。

1

這裏有幾件事情,絕對不要在您的主頁或任何存檔頁面上更改自定義查詢的主要查詢。你總是會遇到分頁問題。

此外,從不使用query_posts來創建自定義查詢。我的重點,就像永遠。

注意:此功能不適用於插件或主題。正如後面所解釋的,改變主查詢有更好,更高性能的選項。 query_posts()過於簡單並且存在問題,通過用查詢的新實例替換頁面的主查詢來修改主查詢。它效率低下(重新運行SQL查詢),並在某些情況下徹底失敗(特別是在處理帖子分頁時)。

如果您需要更改主頁或任何存檔頁面的行爲,請在執行主查詢前使用pre_get_posts`更改/修改主查詢。這是更改主查詢的正確方法。通過在執行之前更改主查詢,您將不會遇到分頁問題。

pre_get_posts可以與條件標籤一起使用以定位特定頁面。看看提供的示例鏈接。