Numeración de secciones y elementos a nivel de bloque en wpautop (); Wordpress como CMS para escritura de formato largo;

4

Estoy empezando a aprender cómo escribir complementos para Wordpress. Estoy interesado en usar WP como CMS para ensayos largos (6000-9000 palabras o más). Mi problema es lo que yo llamo el problema de Kindle, que es cómo abordar de manera confiable las diferentes partes de un documento sin página que se puede leer en una variedad de pantallas / dispositivos, y que tendrá un flujo diferente en cada caso. Si cito un libro electrónico en mi lector electrónico o en un navegador, es difícil referirse a un pasaje específico y saber que mi lector podrá seguirlo hasta la ubicación exacta del texto porque no hay un "número de página" absoluto.

Una posible solución es poner anclajes HTML en el texto. ¿Hay alguna manera de hacer que Wordpress haga esto automáticamente? Aún mejor, es posible que Wordpress trate los elementos como si fueran el comienzo de un elemento SGML, y luego genere automáticamente anclas con números jerárquicos para cada encabezado, cada subtítulo y cada párrafo o bloque "encerrado" con ellos. Estoy pensando en alguna forma de hacer lo que hace LaTeX con las etiquetas \ section {}.

¿Se ha hecho esto? ¿Dónde se aplicaría exactamente este filtro? Adam Brown dice que hay más de 1500 ganchos que puedes usar. Eso es bastante sorprendente, pero también desalentador.

Gracias por tu ayuda.

Saludos,

Ryan

enlace

    
pregunta Ryan Schram 09.03.2013 - 03:46

1 respuesta

2

Probablemente podrías lograr esto con un filtro de algún tipo en the_content .

Aquí hay un ejemplo rápido y sucio que encuentra todas las instancias de <p> e inserta un ancla con nombre, luego agrega una lista de enlaces a cada ancla en la parte superior del contenido.

Consulte también la API de código corto , que podría permitirle agregar secciones arbitrarias con texto agregando un código breve de su propia, 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 );
    
respondido por el Milo 09.03.2013 - 04:44

Lea otras preguntas en las etiquetas