web-dev-qa-db-fra.com

Obtenir le contenu dans le shortcode et y appliquer une fonction externe?

function t_shortcode($atts, $content = null){
$lang = strtolower($atts['lang']);

$content = "<div id='translator' class='translate_".$lang."'>".$content."</div>";
if($lang == $_SESSION['language']):

    return $content;
endif;

}

J'essaie d'obtenir le contenu entre les codes abrégés, de lui appliquer une fonction dans index.php et de renvoyer le contenu $ du code abrégé avec les div inclus.

la deuxième fonction que je voudrais appliquer à la fonction shorcode est:

function display($shortcodecontent, $noofchars){
$content2 = mb_substr($shortcodecontent,0,$noofchars);
return $content2;
}

pour que je puisse utiliser: // 13 est le nombre de caractères

1
Mohamed Said

Ce qui suit ajoute le shortcode [my_t_shortcode], qui accepte un attribut 'lang' et applique la fonction mentionnée ci-dessus au contenu.

//Add shortcodes
add_shortcode( 'my_t_shortcode', 'wpse41477_shortcode_handler' );

//It's good practise to make sure your functions are prefixed by something unique
function wpse41477_shortcode_handler( $atts, $content = null ) {
       //This will extract 'lang' attribute as $lang. You can supply default values too.
       extract( shortcode_atts( array(
          'lang' => 'default_lang',
          ), $atts ) );
    //The above lowercases all values.

    /* Apply external function. 'display' is too generic, 
     * give it a unique prefix to prevent a clash with another plugin/theme/WordPress 
     */
    $content = wpse41477_display($content,13);
    //why not do $content = mb_substr($content,0,13); instead?

    //Apply divs
    $content = "<div id='translator' class='translate_".$lang."'>".$content."</div>";

    //Not sure what the following is for, but I've left it in.
    if($lang == $_SESSION['language']):
        return $content;
    endif;
    }

Et la fonction personnalisée:

function wpse41477_display($shortcodecontent, $noofchars){
     $content2 = mb_substr($shortcodecontent,0,$noofchars);
return $content2;
}

Si c'est le cas, wpse41477_display, je vous recommande fortement de l'inclure directement dans le gestionnaire de shortcode (voir les commentaires).

Le code ci-dessus n'a pas été testé.

2
Stephen Harris