web-dev-qa-db-fra.com

Add_shortcode en tant que classe pour passer des arguments à une fonction

Bonsoir, je veux passer des attributs de shortcode à ma classe sous la forme d'un tableau et du nom de mon shorcode mais dans le codex wordpress ne dit pas comment puis-je faire cela, c'est mon code

 $atributos=array('url' => ' ','text' => ' ');
 $shortcode_name="myshortcode";

 class MyLittleClass {
    public static function exe_short( $atts, $atributos, $shortcode_name) {

     $_atts = shortcode_atts($atributos, $atts );   

     // Attributes turn to variables
        $url = $_atts['url'];
        $text = $_atts['text']; 

        ob_start(); 
        include(ABS_DIR . '/includes/dynamics/'.$shortcode_name.'/index.php');  
        $content = ob_get_clean();
        return $content;
    }
 }

add_shortcode( $shortcode_name, array( 'MyPlugin', 'exe_short');

Je sais que je ne passe pas les variables $ atributos et $ shortcode_name en tant qu'argumens pour exeshort () dans la fonction add_shortcode () mais si je le fais

add_shortcode( $shortcode_name, array( 'MyPlugin',exe_short($atts, $atributos, $shortcode_name))

Cela ne fonctionne pas non plus, comment pourrais-je passer ces variables à ma fonction de classe?

1
Johanna Ferreira

Pour créer plusieurs shortcodes, vous pouvez obtenir les valeurs par défaut d'un attribut statique de la classe. Ce code crée 2 codes courts myshortcode1 et myshortcode2. Dans les fichiers inclus, vous pouvez lire les variables $_atts, $content et $tag

class MyLittleClass {

    public static $shortcodes;


    public static function init() {

        self::$shortcodes = [
            "myshortcode1" => [
                "defaultValues" => [
                    "text" => "my link",
                    "url" => home_url("/"),
                ],
            ],
            "myshortcode2" => [
                "defaultValues" => [
                    "color" => "#EEC",
                ],
            ],
        ];


        foreach (array_keys(self::$shortcodes) as $code) {
            add_shortcode($code, [__CLASS__, "exe_short"]);
        }

    }

    public static function exe_short($attr, $content, $tag) {

        $atributos = self::$shortcodes[$tag]["defaultValues"];
        $_atts = shortcode_atts($atributos, $attr, $tag);

        ob_start(); 
        include(ABS_DIR . '/includes/dynamics/'.$tag.'/index.php');  
        $content = ob_get_clean();

        return $content;

    }

}

MyLittleClass::init();

vous pouvez également créer des codes abrégés en passant un tableau à init ou en créant un filtre lors de l'initialisation de $shortcodes.

0
mmm

Si vous ne pouvez pas modifier la méthode exe_short, vous pouvez créer une nouvelle méthode comme celle-ci.

class MyLittleClass {

    public static function exe_short2($attr, $content, $tag) {

        $atts = $attr;
        $atributos = ["url" => "", "text" => $content];
        $shortcode_name = $tag;

        return self::exe_short( $atts, $atributos, $shortcode_name);

    }


    public static function exe_short( $atts, $atributos, $shortcode_name) {

        $_atts = shortcode_atts($atributos, $atts );

        // Attributes turn to variables
        $url = $_atts['url'];
        $text = $_atts['text']; 

        ob_start(); 
        include(ABS_DIR . '/includes/dynamics/'.$shortcode_name.'/index.php');  
        $content = ob_get_clean();
        return $content;

    }


}

add_shortcode( "myshortcode", array( 'MyPlugin', 'exe_short2');
0
mmm