web-dev-qa-db-fra.com

Numérotation des sections et des éléments de bloc dans wpautop (); Wordpress en tant que CMS pour l'écriture longue forme;

Je commence à apprendre à écrire des plugins pour Wordpress. Je suis intéressé par l’utilisation de WP en tant que système de gestion de contenu pour de longs essais (6 000 à 9 000 mots ou plus). Mon problème est ce que j’appelle le problème Kindle, c’est-à-dire comment traiter de manière fiable les différentes parties d’un document non paginé pouvant être lues sur divers écrans/périphériques et qui se refléteront différemment dans chaque cas. Si je cite un ebook sur mon lecteur électronique ou dans un navigateur, il est difficile de faire référence à un passage spécifique et de savoir que mon lecteur sera en mesure de le suivre à l'emplacement exact du texte car il n'y a pas de "numéro de page" absolu.

Une solution possible consiste à mettre des ancres HTML dans le texte. Existe-t-il un moyen de faire en sorte que Wordpress le fasse automatiquement? Mieux encore, est-il possible pour Wordpress de traiter les éléments comme s’ils constituaient le début d’un élément SGML, puis de générer automatiquement des ancres numérotées hiérarchiquement pour chaque en-tête, chaque sous-en-tête et chaque paragraphe ou bloc "enfermé" avec eux. Je pense à une façon de faire ce que LaTeX fait aux balises\section {}.

Cela a-t-il été fait? Où ce filtre s'appliquerait-il exactement? Adam Brown indique qu'il y a plus de 1500 hameçons que vous pouvez utiliser! C'est assez étonnant, mais aussi décourageant.

Merci de votre aide.

À votre santé,

Ryan

http://rschram.org/

4
Ryan Schram

Vous pouvez probablement y parvenir avec un filtre quelconque sur the_content .

Voici un exemple rapide et incorrect qui trouve toutes les instances de <p> et insère une ancre nommée, puis ajoute une liste de liens vers chaque ancre en haut du contenu.

Découvrez également l'API Shortcode , qui pourrait également vous permettre d'ajouter des sections arbitraires avec du texte en ajoutant votre propre shortcode, tel que [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 );
2
Milo