¿Cómo modificar / extender / anular un método central?

4

Este es mi primer post. De antemano, gracias por darme la bienvenida ...

Contexto

Al poner en cola el estilo, puede convertir su enlace css en comentarios condicionales.

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

Producirá el siguiente código:

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

Esto se hace mediante el método do_item() de la clase WP_Styles (class.wp_styles.php).

Objetivo

Me gustaría agregar un parámetro "anticondicional" con el valor de condición ...

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

para poder enviar esto ("comentarios anidados"):

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

He buscado "cómo modificar el método central", pero no encontré ninguna solución ... :(

Por ahora, puedo hacerlo con un gancho, pero no hay "argumentos". La hoja de estilo y la condición están codificadas ...

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

¡Esto es principalmente para mí una oportunidad para mejorar mi conocimiento y profundizar en WordPress!

¿Alguna idea?

Gracias ...

tm

    
pregunta thierrymichel 05.09.2013 - 10:06

1 respuesta

1

Ya existe una respuesta sencilla por toscho aquí . Basándome en este y en un vistazo a WP_Styles , que se extiende WP_Dependencies y _WP_Dependency , no puedo ver una razón por la que no debería funcionar:

Lo que se haya añadido como extra - conditional , se incluye:

// ~/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() de la siguiente manera:

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

y WP_Dependencies definen a add_data() como esto:

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

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

Lea otras preguntas en las etiquetas