2015-05-21 24 views
0

我的問題是我在Wordpress中使用的分頁。我使用了插件WP Pagenavi。我不確定它有什麼問題。分頁:第3頁未找到WordPress安裝

我發現使用此代碼回答我的問題:

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?> 
<?php query_posts('cat=4&posts_per_page=15'.'&paged=' . $paged); ?> 

但令我失望的,當我posts_per_page減少到5,我可以得到分頁,直到2頁的工作,但是當我點擊頁面3等等,WordPress無法找到它。我用我的研究中的另一種解決方案:

<?php 
$limit = '5'; 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
query_posts('cat=4&showposts=' . $limit . '&paged=' . $paged); 
$wp_query->is_archive = true; $wp_query->is_home = false; 
?> 

它仍然沒有幫助。我不想觸摸functions.php。我只編輯category.php

檢查下面的代碼我塊:

<?php if (is_category('category1')) { ?> 

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?> 
<?php query_posts('cat=1&posts_per_page=15'.'&paged=' . $paged); ?> 

<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 

<!-- SOME CODE TO POST THE POST --> 

<?php endwhile; ?> 
<?php wp_pagenavi() ?> 
<?php endif; ?> 

<?php } else if (is_category('category2')) { ?> 

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?> 
<?php query_posts('cat=2&posts_per_page=15'.'&paged=' . $paged); ?> 

<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 

<!-- SOME CODE TO POST THE POST --> 

<?php endwhile; ?> 
<?php wp_pagenavi() ?> 
<?php endif; ?> 

<?php } else if (is_category('category3')) { ?> 

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?> 
<?php query_posts('cat=3&posts_per_page=5'.'&paged=' . $paged); ?> 

<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 

<!-- SOME CODE TO POST THE POST --> 

<?php endwhile; ?> 
<?php wp_pagenavi() ?> 
<?php endif; ?> 

<?php } else if (is_category('category4')) { ?> 

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?> 
<?php query_posts('cat=4&posts_per_page=5'.'&paged=' . $paged); ?> 

<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 

<!-- SOME CODE TO POST THE POST --> 

<?php endwhile; ?> 
<?php wp_pagenavi() ?> 
<?php endif; ?> 

<?php } else { ?> 

<!-- SOME CODE --> 

<?php } ?> 

請注意,類別1和類別2顯示5個職位,而其他2類將顯示15個職位。這些都在category.php中。我不想使用設置>閱讀中設置的帖子數量。

如果你認爲類別名稱if語句也把貓ID是多餘的,那麼,它沒有得到職位。

UPDATE

我用這個代碼:

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?> 
<?php $args = array ('post_type' => 'post','cat' => '4','posts_per_page' => '5','paged' => $paged);?> 
<?php $my_query = new WP_Query ($args);?> 

再次,它的工作,但它只能顯示兩頁!我甚至不知道第三頁在哪裏,據說應該有第三頁。

+0

永遠不要使用'query_posts',它會破壞分頁和主查詢。因爲這是您的category.php,您也不需要自定義查詢,使用默認循環,然後使用'pre_get_posts'來相應地更改主查詢。 –

+0

我嘗試使用pre_get_posts,但沒有顯示任何帖子。我不知道爲什麼。對不起,我對PHP不太好,所以這個解釋很難理解。 –

+0

沒問題,很高興聽到你已經嘗試過'pre_get_posts'。我認爲這只是一個讓你失敗的誤解。我會嘗試發佈解決方案。我從我的手機發帖,所以很難編碼。另外,我無法測試我代碼 –

回答

1

你的代碼中有一些嚴重的問題

  • 永遠不要query_posts,永遠。它打破了插件和功能依賴的主要查詢對象,它也打破了分頁並失敗,所以當它失敗時很難調試分頁。如果您確實需要使用自定義查詢,請改爲使用WP_Query。你應該花時間閱讀this post和所有鏈接的帖子。這是非常有用的,因爲它告訴你爲什麼你不應該使用query_posts,什麼時候應該使用自定義查詢,什麼時候不使用

  • 這一點是耦合到第一個和鏈接的帖子。您絕不能將主要查詢更改爲在主頁或任何類型的存檔頁面上使用自定義查詢。這總是會導致比實際解決的問題多得多的問題。在運行之前,始終使用pre_get_posts來更改主查詢。通過這種方式,您可以讓主查詢正確處理所有繁重的工作,而不會讓您大汗淋漓。

現在,爲了解決您的問題:

所有的
  • 首先,刪除所有的疑問,只是在你的類別中添加該代碼。PHP(記得替換您的分頁功能,wp_pagenavi()

    if (have_posts()) { 
        while (have_posts()) { 
        the_post(); 
    
         // Your loop with template tags and html mark up 
    
        } 
        wp_pagenavi(); 
    } 
    

    您會立即看到您的類別職位顯示正確,但職位的數量將是一樣的你下後端設置閱讀

  • 我們現在將使用pre_get_posts來更改每個類別的帖子數量。對於這一點,下面的代碼添加到您的functions.php(需要PHP 5.3+和代碼是未經測試

    add_action('pre_get_posts', function ($q) 
    { 
        if (  !is_admin() // Very important, otherwise back end queries will be affected as well 
          && $q->is_main_query() // Very important, we just need to modify the main query 
          && $q->is_category() // Only target category pages 
        ) { 
         // Check on which category page we are and set posts_per_page accordingly 
         if ($q->is_category(array(1, 2))) 
          $q->set('posts_per_page', 15); 
    
         if ($q->is_category(array(3, 4))) 
          $q->set('posts_per_page', 5); 
        } 
    }); 
    

這應該基本上做到這一點。

+0

另一個問題,在我的管理頁面中,帖子也顯示在函數中設置的相同數字中。 –

+0

這就是你的類別ID,所以'$ q-> is_category(array(1,2))'應該檢查你是否在類別頁面1或2上 –

+0

O crap,語法錯誤,將更新我的代碼:-) –

0

我們終於來到了最終答案和工作代碼!

如果您閱讀上面的Pieter Goosen先生的回答,它會幫助您。它真的幫助了我。所以,我會給你最後的答案。這實際上是每個類別中的帖子的自定義數量,無視設置中設置的內容。

所以在我category.php

<?php if (is_category('category1')) { ?> 
    <?php if (have_posts()) { 
    while (have_posts()) { 
    the_post(); 

     // Your loop with template tags and html mark up 

    } 
    wp_pagenavi(); 
} 
?> 

<?php } else if (is_category('category2')) { ?> 

<?php if (have_posts()) { 
    while (have_posts()) { 
    the_post(); 

     // Your loop with template tags and html mark up 

    } 
    wp_pagenavi(); 
} 
?> 

<?php } else if (is_category('category3')) { ?> 

<?php if (have_posts()) { 
    while (have_posts()) { 
    the_post(); 

     // Your loop with template tags and html mark up 

    } 
    wp_pagenavi(); 
} 
?> 

<?php } else if (is_category('category4')) { ?> 

<?php if (have_posts()) { 
    while (have_posts()) { 
    the_post(); 

     // Your loop with template tags and html mark up 

    } 
    wp_pagenavi(); 
} 
?> 

<?php } ?> 

WHERE類別1和類別2顯示5帖子類別3類別4將顯示15個職位

這就是你要放在你的functions.php中。

add_action('pre_get_posts', function($q) { 
    if (!is_admin() && $q->is_main_query() && $q->is_category()) { 
     if ($q->is_category(array(1,2))) { 
      $q->set('posts_per_page', 5); 
     } 
     if ($q->is_category(array(3,4))) { 
      $q->set('posts_per_page', 15); 
     } 
    } 
    return; 
}); 

WHERE陣列內的數字是類別ID。

如果您比較我的代碼和Sir Pieter's,它幾乎相同,但我在add_action()關閉之前添加了return;。但我引用皮埃爾爵士的話:

真的很奇怪你應該回來。 pre_get_posts是一個 操作,而不是過濾器。但無論如何,很高興它解決

如果仍然不能爲你工作,我的永久鏈接設置爲:

http://www.example.com/sample-post/[/%postname%/]

我也有一個WP無類別基地插件,以消除我的類別URL /分類/。因此,取代www.example.com/category/category1,它將是www.example.com/category1

0

假設這可以幫助那些像我一樣的人使用DIVI CHILD主題

我終於找到了解決辦法,搜索divi分頁

事實上,在我的情況下,我建立了一個divi兒童主題。但是,我的自定義類別頁面中的每頁帖子設置爲3,但在我的divi>主題選項中,類別頁面上顯示的帖子數設置爲6

這就是爲什麼在頁面3顯示錯誤404。所以,我把它設置爲1

我上一個帖子說的「博客網頁顯示最多」進入設置閱讀>閱讀選項必須在post_per_page自定義查詢(對於主頁)下,否則它會創建一個404頁面。

但是,看起來像是顯示在Divi選項中的帖子數量覆蓋了博客頁面最多顯示。在這裏,爲什麼到我category.php頁,我被困第3頁

我離開你有關迪維題材兒童我的自定義頁面category.php我的小碼:

<?php 
//query{ 
    //print_r(get_queried_object()); 
    $category = get_queried_object(); 
    $the_cat_nicename = $category->slug; 
    $the_cat_name = $category->name; 

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

    $args_s = new WP_Query(array(
    'post_type' => 'post', 
    'category_name' => $the_cat_nicename, 
    'posts_per_page' => 3, 
    'paged' => $paged, 
    'orderby'=>'date', 
    'order'=>'DESC')); 
//query} 
if ($args_s->have_posts()) 
{ 
    echo $the_cat_name; 
    echo '<br/>'; 
    while ($args_s->have_posts()) 
    { 
     $args_s->the_post(); 
     $the_id=get_the_ID($post->ID); 
     echo $the_id.'<br/>'; 
    } 
    if ($args_s->max_num_pages > 1) 
    { 
     echo get_next_posts_link($GLOBALS['older_post_lang'], $args_s->max_num_pages); 
     echo get_previous_posts_link($GLOBALS['newer_post_lang']); 
    } 
} 
//wordpress _have_posts} 
?> 

不要忘記設置您在類別頁面上顯示的帖子數量爲1,並加入您的Divi>主題選項