Adicione um zero para a paginação

Então eu ainda sou novo no WordPress e no desenvolvimento em geral e tentando adicionar um zero para publicar números de paginação. O código que eu criei é o seguinte:

function leading_zero_wp_link_pages_link( $i ) { $i = zeroise($i, 2); return $i; } add_filter( 'wp_link_pages_link', 'leading_zero_link_pages_link' ); 

o que, claro, não está funcionando. Eu sei que preciso modificar a variável inteira “$ i” conforme especificado no códice e quase com certeza mal entendido como funcionam os ganchos / filtros e qualquer ajuda seria excelente!

Solutions Collecting From Web of "Adicione um zero para a paginação"

wp_link_pages_link filtra todo o link HTML ( etc.), e é por isso que o que você tem não está funcionando. Não parece haver um filtro para apenas o número da página, $i , então você precisará de uma solução alternativa.

Uma vez que a function de retorno de chamada para o filtro wp_link_pages_link passa o $i , poderíamos usá-lo para encontrar o número dentro do HTML e substituí-lo.

A versão simples seria simplesmente replace $i dentro de $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 ); 

Existem dois problemas relacionados com esta solução:

  1. Isso também afetará o número da página no URL, o que não queremos fazer, porque isso é puramente cosmético.
  2. Se o URL include outros números, isso afetará esses também. Isso pode include arquivos de data onde meses ou anos que têm o número da página neles.

Então, o que precisamos fazer é apenas replace o número dentro da tag HTML. Para fazer isso, podemos usar uma expressão regular:

 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 ); 

Agora, alguém pode ser capaz de fornecer uma expressão regular melhor, já que eu estou com lixo neles, mas o que '/>(\D*)(\d*)(\D*) faz é obter caracteres entre > e < , que será a coisa dentro da etiqueta, e retornará 3 coisas: Texto antes de qualquer dígito, qualquer dígito e texto após os dígitos. O texto antes e depois é, portanto, ainda afeta apenas dígitos se link_before , link_after ou pagelink de wp_link_pages() tiverem qualquer outro texto neles.

Com preg_replace() estamos substituindo apenas a segunda coisa devolvida, os dígitos, com a versão zeroizada do número da página.