web-dev-qa-db-fra.com

Comment fonctionne un shortcode?

Je sais comment utiliser les codes abrégés, même les créer, mais ce que je dois comprendre, c’est qu’un code abrégé est un texte brut stocké dans la base de données en tant que contenu de publication. Comment un texte brut de ce type peut être converti en dynamique.

Ce que je veux savoir, c'est comment un texte x peut être traité avant que le serveur ne l'envoie au navigateur pour qu'il se comporte de manière différente?

6
Mohamed Omar

Lors de l'utilisation de the_content(), WordPress utilisera plusieurs filtres pour traiter le texte provenant de l'éditeur. Ces filtres traitent le contenu avant qu'il ne soit envoyé au navigateur. do_shortcode est le filtre qui gère les codes courts.

De /wp-includes/default-filters.php:

// Shortcodes
add_filter( 'the_content', 'do_shortcode', 11 ); // AFTER wpautop()

do_shortcode() est utilisé pour rechercher des codes abrégés dans le contenu et les filtrer par le biais de leurs crochets.

Vous pouvez appliquer le filtre do_shortcode à n’importe quelle chaîne. Par exemple, si vous avez une méta-boîte avec une zone de texte et que vous souhaitez autoriser les utilisateurs à entrer des codes abrégés dans la zone de texte, vous pouvez câbler le filtre do_shortcode pour le gérer.

Un exemple de code court:

[my-shortcode param1=something param2=value]Text...[/my-shortcode]

Lorsque WordPress trouve ce shortcode dans le contenu, il lancera la fonction associée à la balise shortcode my-shortcode.

/**
 * An example shortcode.
 *
 * @param array $atts
 * @param string $content
 * @param string $tag Shortcode tag
 * @return string
 */
add_shortcode( 'my-shortcode', 'wpse_example_shortcode' );
function wpse_example_shortcode( $atts, $content = '', $tag ) {
    $a = shortcode_atts( [
            'param1' => false,
            'param2' => false,
    ], $atts );

    // code...

    return $content . '!!!';
}

Dans ce cas, WordPress exécutera la fonction wpse_example_shortcode() en passant $atts (paramètres et leurs valeurs, par exemple, param1, param2), $content ( Text ... ) et $tag (la balise de code abrégé utilisée, my-shortcode).

Les codes courts valides (y compris leurs paramètres et leur contenu) seront remplacés par la sortie de la fonction de rappel à laquelle ils sont associés. Les codes courts non valides seront sortis exactement comme ils ont été entrés dans le back-end.

11
Dave Romsey

Voici un petit mot:

L'API du shortcode évolue autour de preg_replace_callback où nous définissons les rappels personnalisés avec nos définitions de shortcode.

Les codes courts dans le texte sont analysés avec un modèle d'expression régulière complexe que vous pouvez extraire dans la fonction get_shortcode_regex() .

La mise en œuvre de ceci dans le noyau devient plus compliquée à mesure que nous détaillons les détails ;-)

3
birgire