web-dev-qa-db-fra.com

Comment modifier/étendre/remplacer une méthode de base?

Ceci est mon premier message posté. D'avance, merci de m'accueillir ...

Le contexte

Lorsque vous mettez le style en file d'attente, vous pouvez exporter votre lien css en commentaires conditionnels.

global $wp_styles;
wp_enqueue_style("my_styles_ie");
$wp_styles->add_data("my_styles_ie", "conditional", "(lt IE 9) & (!IEMobile)");

Il produira le code suivant:

<!--[if (lt IE 9) & (!IEMobile)]>
    <link rel="stylesheet" href="#" />
<![endif]-->

Ceci est effectué par la méthode do_item() de la classe WP_Styles (class.wp_styles.php).

Objectif

J'aimerais ajouter un paramètre "anticonditionnel" avec la valeur de condition ...

$wp_styles->add_data("my_styles_ie", "anticonditional", "(gt IE 8) | (IEMobile)");

pour pouvoir sortir ceci ("commentaires imbriqués"):

<!--[if (gt IE 8) | (IEMobile)]><!-->
    <link rel="stylesheet" href="#">
<!--<![endif]-->

J'ai cherché "comment modifier la méthode de base" mais je n'ai trouvé aucune solution ... :(

Pour l'instant, je peux le faire avec un crochet mais il n'y a pas de "arguments". La feuille de style et l'état sont codés en dur ...

function antiConditionnal($tag, $handle) {
    if('my_styles' == $handle)
        $tag = '<!--[if (gt IE 8) | (IEMobile)]><!-->' . "\n" . $tag . '<!--<![endif]-->' . "\n";

    return $tag;
}
add_filter( 'style_loader_tag', 'antiConditionnal', 10, 2);

C'est principalement pour moi une opportunité d'améliorer mes connaissances et de plonger plus profondément dans WordPress!

Une idée?

Je vous remercie...

tm

4
thierrymichel

Il existe déjà une réponse similaire de toscho ici . Sur la base de celui-ci et d'un coup d'œil à WP_Styles, qui étend WP_Dependencies et _WP_Dependency, je ne vois pas pourquoi il ne fonctionnerait pas:

Tout ce qui a été ajouté en tant que extra-conditional est ajouté:

// ~/wp-includes/class.wp-styles.php
if ( isset($obj->extra['conditional']) && $obj->extra['conditional'] ) {
    $tag .= "<!--[if {$obj->extra['conditional']}]>\n";
    $end_cond = "<![endif]-->\n";
}

_WP_Dependency définit add_data() de la manière suivante:

function add_data( $name, $data ) {
    if ( !is_scalar($name) )
        return false;
    $this->extra[$name] = $data;
    return true;
}

et WP_Dependencies définit add_data() comme ceci:

function add_data( $handle, $key, $value ) {
    if ( !isset( $this->registered[$handle] ) )
        return false;

    return $this->registered[$handle]->add_data( $key, $value );
}
1
kaiser