wp_link_pages_link
过滤整个HTML链接(<a href...
等等),这就是为什么你所得到的不起作用。似乎没有只针对页码的筛选器,$i
, 所以你需要一个变通方法。
由于wp_link_pages_link
过滤器通过$i
, 我们可以使用它来查找HTML中的数字并替换它。
简单的版本是$i
在…内$link
:
function wpse_287783_zeroize_page_numbers( $link, $i ) {
$zeroised = zeroise( $i, 2 );
$link = str_replace( $i, $zeroised, $link );
return $link;
}
add_filter( \'wp_link_pages_link\', \'wpse_287783_zeroize_page_numbers\', 10, 2 );
此解决方案有两个相关问题:
这也会影响URL中的页码,我们不想这样做,因为这纯粹是表面现象如果URL包含任何其他数字,这也会影响这些数字。这可能包括包含页码的月份或年份的日期档案所以我们需要做的只是替换HTML标记中的数字。为此,我们可以使用正则表达式:
function wpse_287783_zeroize_page_numbers( $link, $i ) {
$zeroised = zeroise( $i, 2 );
$link = preg_replace( \'/>(\\D*)(\\d*)(\\D*)</\', \'>${1}\' . $zeroised . \'${3}<\', $link );
return $link;
}
add_filter( \'wp_link_pages_link\', \'wpse_287783_zeroize_page_numbers\', 10, 2 );
现在有人可能能够提供更好的正则表达式,因为我对它们一窍不通,但是什么呢
\'/>(\\D*)(\\d*)(\\D*)</\'
是否获取介于
>
和
<
, 这将是标签中的内容,并返回3个内容:任何数字前的文本、任何数字和数字后的文本。前后的文本仍然只影响数字,如果
link_before
,
link_after
或
pagelink
从…起
wp_link_pages()
有任何其他文本。
具有preg_replace()
我们正在用页码的零化版本替换返回的第二个内容,即数字。