Seções de numeração e elementos de nível de bloco em wpautop (); Wordpress como CMS para escrita longa;

4

Estou começando a aprender a escrever plugins para o Wordpress. Estou interessado em usar o WP como um CMS para ensaios longos (6000-9000 palavras ou mais). Meu problema é o que eu chamo de problema do Kindle, que é como você aborda de forma confiável as diferentes partes de um documento não-paginado que pode ser lido em uma variedade de telas / dispositivos, e refluir de forma diferente em cada caso. Se estou citando um e-book no meu e-reader ou em um navegador, é difícil me referir a uma passagem específica e saber que meu leitor poderá segui-lo até o local exato do texto, porque não há um "número de página" absoluto.

Uma solução possível é colocar âncoras de HTML no texto. Existe alguma maneira de obter o Wordpress para fazer isso automaticamente? Melhor ainda, é possível que o Wordpress trate os elementos como se eles fossem o começo de um elemento SGML e, em seguida, gerasse automaticamente âncoras numeradas hierarquicamente para cada título, cada subtítulo e cada parágrafo ou bloco "fechado" com eles. Estou pensando em alguma maneira de fazer o que o LaTeX faz com as tags \ section {}.

Isso foi feito? Onde exatamente esse filtro se aplica? Adam Brown diz que existem mais de 1500 ganchos que você pode usar! Isso é incrível, mas também assustador.

Obrigado pela sua ajuda.

Felicidades,

Ryan

enlace

    
por Ryan Schram 09.03.2013 / 03:46

1 resposta

2

Você provavelmente conseguiria isso com um filtro de algum tipo em the_content .

Veja um exemplo rápido e sujo que encontra todas as instâncias de <p> e insere uma âncora nomeada e, em seguida, adiciona uma lista de links para cada âncora na parte superior do conteúdo.

Confira também a API Shortcode , que também pode adicionar seções arbitrárias com texto adicionando um código de acesso curto. próprio, como [section id="something"] .

class InsertAnchors {
    protected $count = 0;
    protected $links = '';
    public function build( $pattern, $content ) {
        $this->count = 0;
        $this->links = '';
        $content = preg_replace_callback( $pattern, array( $this, '_replacer' ), $content );
        return '<p>' . $this->links . '</p>' . $content;
    }
    public function _replacer( $matches ) {
        $this->count++;
        $this->links .= '<a href="#section_' . $this->count . '">Section ' . $this->count . '</a><br>';
        return '<p><a name="section_' . $this->count . '"></a>';
    }
}

function anchors_content_filter( $content ){
    $insert = new InsertAnchors();
    return $insert->build( '~<p>~', $content );
}
add_filter( 'the_content', 'anchors_content_filter', 100 );
    
por Milo 09.03.2013 / 04:44