web-dev-qa-db-fra.com

Comment étendre les valeurs par défaut de shortcode pour un plugin?

Je reconnais que cela conviendrait mieux au fil de discussion officiel du plugin, mais le développeur ne semble pas lire les forums.

J'utilise le plugin Standout CSS3 Buttons pour ajouter des boutons via un shortcode autour de mon site. Il existe un paramètre facultatif dans le shortcode, cssclass, qui vous permet de spécifier une classe personnalisée pour le bouton. Puisque mon site est construit sur le framework Gantry, qui a déjà des règles pour la classe .button, j'aimerais vraiment déclarer simplement cssclass="button" dans le shortcode et laisser le CSS de Gantry le couvrir. Malheureusement, lorsque je le fais, le plug-in ne semble pas le reconnaître et, lorsque la page est chargée, le bouton n'a pas la classe .button.

Si, au lieu de cssclass="button", je spécifie une classe définie par le plug-in, telle que "button-pinterest" ou "button-rss", le bouton se met à jour correctement, reflétant cette classe et les styles appropriés. Il semble que le plug-in supprime toute classe personnalisée, ce qui semble aller à l'encontre de l'objectif même d'offrir des classes CSS personnalisées.

Vous pouvez voir un bouton généré par le plugin sur une page ici , dans la barre latérale. En ce moment, il utilise la classe .button-pinterest, et j'aimerais lui donner la classe .button à la place.

Je n'ai pas les côtelettes PHP pour regarder le plugin et comprendre comment lui faire ajouter la classe que je spécifie dans le shortcode. Y a-t-il quelqu'un qui pourrait bien y jeter un coup d'oeil et m'aider à ajouter mes cours personnalisés?

2
SpencerDub

Vous pouvez pirater le shortcode et utiliser votre propre logique supplémentaire.

Exemple de code, non testé:

add_action( 'after_setup_theme', function()
{
    // Replace the plugin shortcode handler with your own.
    add_shortcode( 'standout-css3-button', function( $atts, $content = NULL )
    {
        // Let the plugin make the button and store the result.
        $button = scss3button( $atts, $content );

        // No custom class, stop.
        if ( empty ( $atts['cssclass'] ) )
            return $button;

        // Inject your own class, and add a white space as class separator.
        return str_replace(
            'class="',
            'class="' . $atts['cssclass'] . ' ',
            $button
        );
    });
});

À propos: je n’utiliserais ce plugin sur aucun de mes sites. Le code me fait grincer des dents. Vous devriez vraiment envisager d'implémenter les boutons dont vous avez besoin dans votre thème et vous en tirer avec moins de code et de meilleure qualité.

2
fuxia