Berikut cara untuk mendukung judul pagination dalam formulir:
<!--nextpage(.*?)?-->
dengan cara simlar sebagai inti mendukung <!--more(.*?)?-->
.
Ini sebuah contoh:
<!--nextpage Planets -->
Let's talk about the Planets
<!--nextpage Mercury -->
Exotic Mercury
<!--nextpage Venus-->
Beautiful Venus
<!--nextpage Earth -->
Our Blue Earth
<!--nextpage Mars -->
The Red Planet
dengan output yang mirip dengan:
Ini diuji pada tema Twenty Sixteen , di mana saya harus menyesuaikan bantalan dan lebar sedikit:
.page-links a, .page-links > span {
width: auto;
padding: 0 5px;
}
Plugin demo
Berikut adalah demo plugin yang menggunakan content_pagination
, wp_link_pages_link
, pre_handle_404
dan wp_link_pages_args
filter untuk mendukung extenstion ini dari nextpage penanda ( PHP 5.4+ ):
<?php
/**
* Plugin Name: Content Pagination Titles
* Description: Support for <!--nextpage(.*?)?--> in the post content
* Version: 1.0.1
* Plugin URI: http://wordpress.stackexchange.com/a/227022/26350
*/
namespace WPSE\Question202709;
add_action( 'init', function()
{
$main = new Main;
$main->init();
} );
class Main
{
private $pagination_titles;
public function init()
{
add_filter( 'pre_handle_404', [ $this, 'pre_handle_404' ], 10, 2 );
add_filter( 'content_pagination', [ $this, 'content_pagination' ], -1, 2 );
add_filter( 'wp_link_pages_link', [ $this, 'wp_link_pages_link' ], 10, 2 );
add_filter( 'wp_link_pages_args', [ $this, 'wp_link_pages_args' ], PHP_INT_MAX );
}
public function content_pagination( $pages, $post )
{
// Empty content pagination titles for each run
$this->pagination_titles = [];
// Nothing to do if the post content doesn't contain pagination titles
if( false === stripos( $post->post_content, '<!--nextpage' ) )
return $pages;
// Collect pagination titles
preg_match_all( '/<!--nextpage(.*?)?-->/i', $post->post_content, $matches );
if( isset( $matches[1] ) )
$this->pagination_titles = $matches[1];
// Override $pages according to our new extended nextpage support
$pages = preg_split( '/<!--nextpage(.*?)?-->/i', $post->post_content );
// nextpage marker at the top
if( isset( $pages[0] ) && '' == trim( $pages[0] ) )
{
// remove the empty page
array_shift( $pages );
}
// nextpage marker not at the top
else
{
// add the first numeric pagination title
array_unshift( $this->pagination_titles, '1' );
}
return $pages;
}
public function wp_link_pages_link( $link, $i )
{
if( ! empty( $this->pagination_titles ) )
{
$from = '{{TITLE}}';
$to = ! empty( $this->pagination_titles[$i-1] ) ? $this->pagination_titles[$i-1] : $i;
$link = str_replace( $from, $to, $link );
}
return $link;
}
public function wp_link_pages_args( $params )
{
if( ! empty( $this->pagination_titles ) )
{
$params['next_or_number'] = 'number';
$params['pagelink'] = str_replace( '%', '{{TITLE}}', $params['pagelink'] );
}
return $params;
}
/**
* Based on the nextpage check in WP::handle_404()
*/
public function pre_handle_404( $bool, \WP_Query $q )
{
global $wp;
if( $q->posts && is_singular() )
{
if ( $q->post instanceof \WP_Post )
$p = clone $q->post;
// check for paged content that exceeds the max number of pages
$next = '<!--nextpage';
if ( $p
&& false !== stripos( $p->post_content, $next )
&& ! empty( $wp->query_vars['page'] )
) {
$page = trim( $wp->query_vars['page'], '/' );
$success = (int) $page <= ( substr_count( $p->post_content, $next ) + 1 );
if ( $success )
{
status_header( 200 );
$bool = true;
}
}
}
return $bool;
}
} // end class
Instalasi : Buat/wp-content/plugins/content-pagination-titles/content-pagination-titles.php
file dan aktifkan plugin. Selalu ide yang baik untuk membuat cadangan sebelum menguji plugin apa pun.
Jika penanda halaman berikutnya atas hilang, maka judul pagination pertama adalah numerik.
Juga jika judul pagination konten hilang, yaitu <!--nextpage-->
, maka itu akan numerik, seperti yang diharapkan.
Saya pertama kali lupa tentang bug halaman berikutnya di WP
kelas, yang muncul jika kita mengubah jumlah halaman melalui content_pagination
filter. Ini baru-baru ini dilaporkan oleh @PieterGoosen di sini di # 35562 .
Kami mencoba mengatasinya di plugin demo kami dengan pre_handle_404
panggilan balik filter, berdasarkan WP
pemeriksaan kelas di sini , di mana kami memeriksa <!--nextpage
alih - alih <!--nextpage-->
.
Tes
Berikut ini beberapa tes lebih lanjut:
Tes # 1
<!--nextpage-->
Let's talk about the Planets
<!--nextpage-->
Exotic Mercury
<!--nextpage-->
Beautiful Venus
<!--nextpage-->
Our Blue Earth
<!--nextpage-->
The Red Planet
Output untuk 1 dipilih:
seperti yang diharapkan.
Tes # 2
Let's talk about the Planets
<!--nextpage-->
Exotic Mercury
<!--nextpage-->
Beautiful Venus
<!--nextpage-->
Our Blue Earth
<!--nextpage-->
The Red Planet
Output untuk 5 dipilih:
seperti yang diharapkan.
Tes # 3
<!--nextpage-->
Let's talk about the Planets
<!--nextpage Mercury-->
Exotic Mercury
<!--nextpage-->
Beautiful Venus
<!--nextpage Earth -->
Our Blue Earth
<!--nextpage Mars -->
The Red Planet
Output untuk 3 dipilih:
seperti yang diharapkan.
Tes # 4
Let's talk about the Planets
<!--nextpage Mercury-->
Exotic Mercury
<!--nextpage Venus-->
Beautiful Venus
<!--nextpage Earth -->
Our Blue Earth
<!--nextpage Mars -->
The Red Planet
Output dengan Earth dipilih:
seperti yang diharapkan.
Alternatif
Cara lain adalah memodifikasinya untuk mendukung judul halaman yang akan ditambahkan dengan:
<!--pt Earth-->
Mungkin juga berguna untuk mendukung satu komentar untuk semua judul halaman ( poin ):
<!--pts Planets|Mercury|Venus|Earth|Mars -->
atau mungkin melalui bidang khusus?
apply_filter
argumen: Dpre_handle_404
filter.Anda bisa menggunakan filter
wp_link_pages_link
Pertama, lewati placeholder string khusus kami (Ini bisa apa saja yang Anda suka kecuali string yang berisi
%
, hanya untuk saat ini saya menggunakan#custom_title#
).Kemudian tambahkan filter kami
functions.php
. Dalam fungsi panggilan balik buatlah array judul kemudian periksa nomor halaman saat ini dan ganti#custom_title#
dengan nilai yang sesuai dengan nomor halaman saat ini.Contoh:-
sumber