PDA

View Full Version : Nhờ hướng dẫn phân trang WordPress



Loc_rabbirt
22-06-2012, 00:31
hiện mình đang tập sử dụng WP, các theme premium hoặc không premium share rất nhiều trên mạng, nhưng mình vừa muốn học cách sử dụng vừa muốn tự chỉnh sửa, nay đang vướng vấn đề phân trang.

1. Phân trang với WP-Pagenavi.
2. Phân trang bằng code.

cả 2 cách mình đều đã thực hiện nhưng mình vẫn ko phân được trang, theo như một số ý kiến của các bạn đã dùng là do query_posts() gán vào thì các page khác không chuyển và nội dung sẽ vẫn như cũ ( nghĩa là không đổi sang page 2 mặc dù đường dẫn vẫn là page 2 )

mong các bạn hướng dẫn giúp mình cách sửa lỗi này, cảm ơn.

Leinside
22-06-2012, 01:02
hiện mình đang tập sử dụng WP, các theme premium hoặc không premium share rất nhiều trên mạng, nhưng mình vừa muốn học cách sử dụng vừa muốn tự chỉnh sửa, nay đang vướng vấn đề phân trang.

1. Phân trang với WP-Pagenavi.
2. Phân trang bằng code.

cả 2 cách mình đều đã thực hiện nhưng mình vẫn ko phân được trang, theo như một số ý kiến của các bạn đã dùng là do query_posts() gán vào thì các page khác không chuyển và nội dung sẽ vẫn như cũ ( nghĩa là không đổi sang page 2 mặc dù đường dẫn vẫn là page 2 )

mong các bạn hướng dẫn giúp mình cách sửa lỗi này, cảm ơn.
Bạn đã sai khi nghĩ đến việc phân trang, phân trang không ai dùng query post cả.

Ở một mức độ đơn giản - nghĩa là chúng ta phân trang theo kiểu Next/Pre hay Newest/Older .. chúng ta sử dụng function sau:
Codex: http://codex.wordpress.org/Next_and_Previous_Links


<nav class="wp-prev-next">
<ul class="clearfix">
<li class="next-link"><?php next_posts_link(__('&laquo; Older Entries', "WPVN")) ?></li>
<li class="prev-link"><?php previous_posts_link(__('Newer Entries &raquo;', "WPVN")) ?></li>
</ul>
</nav>


Với một đòi hỏi khác, tôi muốn phân trang theo cách "Trang X/N" X là trang đang duyệt với N là tổng số trang ta dùng:

Codex: http://codex.wordpress.org/Function_Reference/paginate_links


<div class="wp-prev-next">
<div class="previous-page"><?php next_posts_link('Previous page', 0); ?></div>
<div class="page-number"><?php echo (empty($paged)?'1':$paged).' / '.$wp_query->max_num_pages; ?></div>
<div class="next-page"><?php previous_posts_link('Next page', 0); ?></div>
</div>


- Với đòi hỏi phân trang kiểu <<Prev 1 2 3 4 5 N Next>> tôi sẽ viết ở một hướng dẫn khác vì nó tương đối dài.

Về việc bạn sử dụng plugin nhưng không thành công có lẽ bạn nên đọc lại readme tại đây: http://wordpress.org/extend/plugins/wp-pagenavi/installation/

Rất vui nếu có nhiều người như bạn cùng sử dụng WordPress: http://wordpress.com.vn/blog/2012/06/wordpress-pagination-tu-don-gian-den-nang-cao/

hanhtinhla92
22-06-2012, 08:06
Trong query_posts bác thêm
'paged' => get_query_var('paged')

hoặc

'paged' => get_query_var('page')

vào xem có được không, bác cứ thử lần lượt 2 cái. Em ví dụ ở dưới đó

<?php query_posts(array('post__in'=> $postin), 'category__in' => $category, 'paged' => get_query_var('paged')) ); ?>

hoặc

<?php query_posts(array('post__in'=> $postin), 'category__in' => $category, 'paged' => get_query_var('page')) ); ?>

xemphimvui.com
22-06-2012, 08:22
Bạn đã sai khi nghĩ đến việc phân trang, phân trang không ai dùng query post cả.
Câu này hoàn toàn sai. Có thể dùng query_posts() và thêm thông số paged vào là được.


- Với đòi hỏi phân trang kiểu <<Prev 1 2 3 4 5 N Next>> tôi sẽ viết ở một hướng dẫn khác vì nó tương đối dài.
Câu này cũng hoàn toàn sai vì nó không hề dài và rất đơn giản: http://codex.wordpress.org/Function_Reference/paginate_links


Trong query_posts bác thêm
'paged' => get_query_var('paged')
Theo mình thì bạn này nói đúng. Bạn có thể bị lỗi do thiếu cái này.

chuquydo244
22-06-2012, 12:07
mình cũng chưa hiểu phần này lắm.cảm ơn các bạn nha

Loc_rabbirt
22-06-2012, 13:34
nếu mình muốn sửa cái query_posts() ấy thì phải vào source của file nào vậy, mình đã tìm các file trong theme nhưng không có, không lẽ edit trong query.php à :dontgetit.

mình chưa bik include nó vào đâu cho chuẩn các bạn chỉ giúp hộ mình cái file sửa với, hay là sửa ở đâu thì tùy theme ? vì mình chưa học qua code nên mình chưa bik gì lắm, mong các bạn giúp đỡ thêm.

hanhtinhla92
22-06-2012, 14:33
cũng tùy cấu trúc của theme, nếu bạn sửa ở trang chủ thì tìm ở

wp-content\themes\theme-cua-ban\index.php

ở trong từng category thì ở

wp-content\themes\theme-cua-ban\archive.php

còn những chỗ khác thì nó ở những file php tương ứng thôi.
Còn một số theme thì người ta tạo ra hàm sau đó chỉ gọi hàm thì bạn tìm trong

wp-content\themes\theme-cua-ban\functions.php

đại khái chỉ ở quanh quanh chỗ ấy thôi :D

ngoc_ann_00
22-06-2012, 16:05
nếu mình muốn sửa cái query_posts() ấy thì phải vào source của file nào vậy, mình đã tìm các file trong theme nhưng không có, không lẽ edit trong query.php à :dontgetit.

bác đề cập đến 1 vấn đề rất cơ bản là phân trang
nhưng đoạn này thì cao siêu quá,hack core??

Loc_rabbirt
22-06-2012, 17:06
bác đề cập đến 1 vấn đề rất cơ bản là phân trang
nhưng đoạn này thì cao siêu quá,hack core??

quả thật mình không biết nên mới hỏi, bạn có thể đọc là tại sao mình lại hỏi như vậy vì mình không biết, nếu file query.php ấy là file trong core mình sẽ không đụng vào, nếu bạn có thể giúp được thì mình rất cảm ơn, còn nếu bạn không thể hoặc không muốn giúp thì mình thấy cũng chẳng có vấn đề gì ở đây cả, sự khác biệt giữa cơ bản và cao siêu là một bên chẳng biết đó là cái gì và một bên biết rất rõ đó là cái gì.

Loc_rabbirt
22-06-2012, 17:42
cũng tùy cấu trúc của theme, nếu bạn sửa ở trang chủ thì tìm ở

wp-content\themes\theme-cua-ban\index.php

ở trong từng category thì ở

wp-content\themes\theme-cua-ban\archive.php

còn những chỗ khác thì nó ở những file php tương ứng thôi.
Còn một số theme thì người ta tạo ra hàm sau đó chỉ gọi hàm thì bạn tìm trong

wp-content\themes\theme-cua-ban\functions.php

đại khái chỉ ở quanh quanh chỗ ấy thôi :D

http://gk.site5.com/t/334

bạn thử down về xem hộ mình với :(, mình tìm sáng tới giờ chảy cả nước mắt ra mà vẫn chưa thấy cái đó :(.

hanhtinhla92
22-06-2012, 18:27
bạn đặt thêm truy vấn query_posts() ở ngay trước câu lệnh

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

Câu lệnh "<?php if (have_posts()) : while (have_posts()) : the_post(); ?>" này là cứ có bài viết nó nó xử lý tất.
Query_posts cũng là xử lý truy vấn nên bác đặt nó trước
Em ví dụ em viết câu lệnh này

<?php query_posts(array( 'category__in' => 12, 'paged' => get_query_var('paged')) ); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

cái query_posts có nhiệm vụ truy vấn tất cả bài viết trong catagory có id=12 và cái "<?php if (have_posts()) : while (have_posts()) : the_post(); ?>" có nhiệm vụ lấy hết tất cả các bài viết được xét bởi query_posts.
Nếu không có query_posts thì nó lấy tất cả trong data
Câu lệnh của e bao gồm cả phân trang rồi đấy nhé
Nếu nó vẫn không được bác thử thay

'paged' => get_query_var('paged')

bằng

'paged' => get_query_var('page')

nhé
(em giải thích có gì chưa đúng mong các pro đóng góp, đừng ném gạch tội nghiệp e lắm)

Loc_rabbirt
22-06-2012, 20:16
bạn đặt thêm truy vấn query_posts() ở ngay trước câu lệnh



đầu tiên cảm ơn hanhtinhla92 đã giúp mình.

hiện giờ trong file home.php mình có 1 đoạn


if(!query_posts('showposts='.get_option('journal_h ome_posts').'&tag=homepost')){
if(get_option('journal_home_posts')!=''){
query_posts('showposts='.get_option('journal_home_ posts'));
}else{
query_posts('showposts=6');
}
}else{
query_posts('showposts='.get_option('journal_home_ posts').'&tag=homepost');
if(get_option('journal_home_posts')!=''){
query_posts('showposts='.get_option('journal_home_ posts').'&tag=homepost');
}else{
query_posts('showposts=6&tag=homepost');
}
}

nếu mình bỏ đoạn đấy đi mình sẽ phân trang cho index của mình ngay lập tức.

nhưng như thế lại phát sinh vấn đề như sau :

- hiện giờ bố cục ở index của mình là 2 bài ở tag future và 9 bài ở tag home nếu mình bỏ đoạn code này thì sẽ ko được bố cố 9 bài ở tag home nữa mà nó lên thành 10, cái này mình vẫn chưa biết sửa ở đâu.

- vấn đề tiếp theo là theo như mình hiểu thì đoạn code ở trên phân cho home hiện tag home, nếu mà mình bỏ đoạn code đó nó sẽ hiện tất cả bài viết theo thứ tự từ trước tới giờ không chọn bài nào tag home mới hiện nữa.

mong các pro đi qua có thể góp ý cho mình để sửa chữa và học hỏi được một số ý kiến hay cho mình.

cảm ơn.

Loc_rabbirt
23-06-2012, 14:08
mấy bạn giúp mình với sửa tới sửa lui không được :down:

hanhtinhla92
23-06-2012, 17:23
hi, xơ ri bác, nhưng em chưa hiểu cái vấn đề 1, có phải khi bác bỏ đoạn code đó đi thì nó hiện lên 2 bài ở tag future và 10 bai ở tag home à

Loc_rabbirt
23-06-2012, 19:19
hi, xơ ri bác, nhưng em chưa hiểu cái vấn đề 1, có phải khi bác bỏ đoạn code đó đi thì nó hiện lên 2 bài ở tag future và 10 bai ở tag home à

uk bạn đúng rồi, cái đó nó là mặc định trong core tối qua mình đã tìm được, nhưng mà mình lại muốn nó hiện theo kiểu tag hiện giờ, vì có những bài mình viết nhưng để trong chuyên mục không muốn hiện tất tần tật ra index.

hanhtinhla92
25-06-2012, 13:22
không muốn bài nào hiển thị thì bạn 'post__not_in' => $id-bai-viet