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?
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
.
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');