Como modificar / estender / substituir um método principal?

4

Este é meu primeiro post. Com antecedência, obrigado por me receber ...

Contexto

Quando você enfileira o estilo, pode enviar seu link css para comentários condicionais.

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

Produzirá o seguinte código:

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

Isso é feito pelo método do_item() da classe WP_Styles (class.wp_styles.php).

Meta

Eu gostaria de adicionar um parâmetro "anticonditionnal" com o valor da condição ...

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

para poder produzir isto ("comentários aninhados"):

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

Eu pesquisei sobre "como modificar o método core", mas não encontrei nenhuma solução ...: (

Por enquanto, posso fazer isso com um gancho, mas não há "argumentos". Folha de estilo e condição são codificados ...

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);

Isso é principalmente para mim uma oportunidade de melhorar meu conhecimento e aprofundar o WordPress!

Alguma ideia?

Obrigado ...

tm

    
por thierrymichel 05.09.2013 / 10:06

1 resposta

1

Já existe uma resposta semelhante por toscho aqui . Com base nessa e na análise de WP_Styles , que estende WP_Dependencies e _WP_Dependency , não consigo ver o motivo pelo qual ela não deve funcionar:

O que quer que tenha sido adicionado como extra - conditional , é lançado:

// ~/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 define add_data() da seguinte maneira:

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

e WP_Dependencies definem add_data() da seguinte forma:

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

    return $this->registered[$handle]->add_data( $key, $value );
}
    
por kaiser 05.09.2013 / 15:06