Apa yang ingin saya lakukan:
Atur WP_Query
pagination dalam file template single-custom-post-type.php
Apa yang telah aku lakukan
1) Membuat jenis posting yang disebut "penulis". Setiap postingan dalam tipe postingan itu adalah seorang penulis individual.
2) Halaman layar edit edit standar berisi dropdown yang mencantumkan semua posting (penulis) dari jenis posting kustom penulis.
3) Membuat template single-author.php yang meminta semua posting dengan metadata penulis dari dropdown, sehingga hasilnya adalah daftar posting yang memiliki penulis yang sama yang ditugaskan kepadanya (seperti arsip):
<?php
// set the "paged" parameter (use 'page' if the query is on a static front page)
global $paged;
/*We need this here to add and maintain Pagination if Template is assigned to Front Page*/
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(
'posts_per_page' => 10,
'meta_key' => 'author_select',
'meta_value' => $author_id,
'paged' => $paged,
);
$temp = $wp_query;
$wp_query = NULL;
$wp_query = new WP_Query($args);
?>
<?php if( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<?php // Successfully outputs the results of the above query, so I've omitted the code from this example. ?>
<?php endwhile; ?>
<div class="single_navigation">
<?php if( get_adjacent_post( false, '', true ) ) { ?>
<span class="prev"><?php previous_post_link( '< %link' ) ?></span>
<?php } ?>
<?php if( get_adjacent_post( false, '', false ) ) { ?>
<span class="next"><?php next_post_link( '%link >' ) ?></span>
<?php } ?>
</div><!--/single navigation-->
<?php endif; ?>
<?php
$wp_query = null;
$wp_query = $temp;
wp_reset_query();
?>
Apa yang saya terjebak
Tautan pagination tidak muncul. Saya telah melakukan beberapa penelitian dan menemukan bahwa mereka menggunakan $wp_query
variabel, namun ketika saya mengubah variabel kueri $wp_query
, tautan muncul, tetapi ketika diklik tidak melakukan apa-apa.
Adakah yang salah tahu?
Edit:
Untuk menjawab beberapa pertanyaan Anda, kueri saya berhasil menampilkan posting yang saya query, $ author_id sudah memiliki nilai yang tidak saya sertakan dalam cuplikan kode ini. Demikian pula, saya meninggalkan output konten aktual dalam loop sementara karena bagian itu bukan masalah. Masalahnya adalah saya harus membuat paginasi konten yang sudah ada di posting tunggal ini.
Tujuan dari fungsi ini adalah untuk memungkinkan posting memiliki penulis khusus (di luar sistem Pengguna yang dibangun di dalam) dan tujuan template ini adalah untuk menampilkan semua posting untuk penulis yang diberikan (yang sudah berfungsi).
the_title()
'meta_value' => $author_id
diisi dari dropdown yang disebutkan? Dan ketika memilih masing-masing penulis melalui dropdown, apakah sepuluh posting pertama ditampilkan dengan benar?$author_query->have_posts()
kembalitrue
dan yang$author_query
benar - benar berisi posting?Jawaban:
Anda memiliki 2 masalah.
Masalah pertama
Garis
akan gagal, karena pada tampilan posting tunggal, ketika URL berisi
'/page/XX/'
, set variabel WordPress adalah'page'
dan tidak'paged'
.Anda mungkin berpikir untuk menggunakan
'page'
bukan'paged'
, tapi itu tidak akan berhasil, karena sekali'page'
variabel dimaksudkan untuk digunakan untuk multi-halaman tunggal pos (pemisahan halaman menggunakan<!--nextpage-->
) dan sekali posting tidak multi-halaman, WordPress akan mengarahkan permintaan ke URL tanpa'/page/XX/'
.Inilah yang terjadi ketika Anda memberi nama variabel kueri Anda
$wp_query
.Solusinya adalah mencegah pengalihan tersebut dengan menghapus fungsi yang bertanggung jawab untuknya, yang
'redirect_canonical'
terhubung ke'template_redirect'
:Jadi, di
functions.php
add Anda :Sekarang WordPress tidak akan mengarahkan ulang dan akan mengatur dengan benar
'paged'
kueri var.Masalah kedua
next_posts_link()
danprevious_posts_link()
keduanya memeriksaif ( ! is_single() )
untuk menampilkan pagination.Sekarang,
is_single()
benar dalam kasus Anda, karena Anda berada dalam satu posting tipe 'penulis', sehingga fungsi-fungsi itu tidak dapat berfungsi seperti yang Anda harapkan.Anda memiliki 3 kemungkinan:
query_posts
untuk mengganti permintaan utama (benar - benar tidak disarankan)is_single()
palsu untuk halaman, dan kode Anda akan berfungsi di sana.Itulah kode untuk nomor solusi # 3:
dan gunakan seperti ini di
single-authors.php
:sumber
the_posts_pagination
tetapi harus mengambil salinan wp_query asli sebagaimana diuraikan dalam pertanyaan ini: wordpress.stackexchange.com/questions/216821/…Berdasarkan pertanyaan WPSE serupa lainnya " Pagination tidak bekerja dengan nilai bidang khusus wp_query ", saya sarankan menambahkan
global $paged;
ke awal file template Anda:sumber
$GLOBALS['paged'] = get_query_var( 'paged' );
. Lain hanya menggunakan konten global.$author_query
menjadi$wp_query
dan itu tampaknya membuat pagination muncul, tetapi ketika saya mengklik halaman itu menyegarkan dan tidak benar-benar pergi ke halaman berikutnya, meskipun ada beberapa halaman. Saya telah memperbarui jawaban saya untuk mencerminkan perubahan itu.global
dan$GLOBALS
. Sedikitvar_dump()
, beberapa fungsi dan Anda baik-baik saja. Untuk benar-benar memahaminya dengan sedikit coba / kesalahan Anda akan kira-kira. butuh setengah jam. Ini akan membantu Anda lebih memahami fungsi vs kelas dan pendekatan OOP secara keseluruhan juga. Dan itu jelas akan membawa Anda lebih dekat untuk memahami ruang nama :)