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