Implementando uma tabela geral de conteúdo em páginas de postagem paginadas individualmente

4

Estou trabalhando em um blog e a maioria das minhas postagens são tão longas que exigem paginação. Veja um dos meus posts . Este post tem muitas páginas.

O único problema é que não consigo encontrar uma maneira de mostrar um índice que listará todos os cabeçalhos de maneira consistente em várias páginas.

Demarcamos a postagem única em diferentes páginas com a tag: <!--nextpage--> .

Atualmente estou usando o plugin "Table of Contents Plus (TOC +)" e ele funciona muito bem em páginas únicas , mas falha quando a página é paginada usando <!--nextpage--> .

Na verdade, estou esperando encontrar ajuda para escrever um plug-in que possa ser útil.

EDITADO - PROPOSTA DE SOLUÇÃO / HACK

Em uma tentativa de resolver esse problema, mapeei as etapas a seguir para resolver esse problema:

  1. Verifique se a página está paginada - wordpress O WordPress tem uma variável global, $multipage , que indica se uma postagem é ou não paginada.

  2. se a postagem for paginada, a tabela de código de conteúdo (a ser gravada ou modificada) verificará os cabeçalhos em cada página.

  3. Os cabeçalhos encontrados em cada página serão armazenados em uma matriz e serão usados para exibir o sumário

  4. Além disso, para Postagem única paginada, o código será configurado para exibir o mesmo índice de forma consistente em todas as páginas, em vez de exibir diferentes TOCs por página

O CÓDIGO

<?php
/**
 * Determines whether or not the current post is a paginated post.
 * @return   boolean    True if the post is paginated; false, otherwise.
 */
function acme_is_paginated_post() {
    global $multipage;
    return 0 !== $multipage; 
} 
?>

Se a postagem for paginada, as seguintes verificações serão feitas no arquivo single.php :

<?php if ( acme_is_paginated_post() ) { ?>
<div class="post-pagination-toc">
        <!-- paginated post TOC  display that checks headers across different poages and the displays all headers in as TOC's content uniformly across all paginated pages -->
</div>
<?php else { ?>
<div class="normal-singlepage-toc">
    <!-- normal TOC display for single non-paginated post -->
</div>
<?php } ?>

Na verdade, reduzi o código acima em uma função simples TOC_new()

<?php 
function TOC_new () {
global $numpages;
if ( is_singular() && $numpages > 1 ) {
    // This is a single post
    // and has more than one page;
    // Implement a General TOC to be displayed consistently multiple Pages and return values
} else {
    // This is a single post
    // and has only one page;
    // implement TOC code for single pages.
}
?>
    
por Tamara 30.03.2015 / 17:51

1 resposta

0

Apenas inspecione o conteúdo da postagem atual para <!--nextpage--> :

function wpse_check_multi_page()
{
    $num_pages    = substr_count(
        $GLOBALS['post']->post_content,
        '<!--nextpage-->'
    ) + 1;
    $current_page = get_query_var( 'page' );
    return array ( $num_pages, $current_page );
}

Na página 2 de 3, que retorna:

Array
(
    [0] => 3
    [1] => 2
)

Em uma postagem não paga, ela retorna:

Array
(
    [0] => 1
    [1] => 0
)
    
por jim.duck 25.08.2015 / 22:04

Tags