web-dev-qa-db-fra.com

Le meilleur moyen d'injecteur des CSS dans admin_head dans les plugins?

Je cherche le meilleur moyen d'injecter du CSS dans le CP Admin de WordPress.

Actuellement, j'utilise le hook d'action admin_head et dans ce hook, j'utilise dirname( __FILE__ ) pour récupérer le répertoire des feuilles de style. Cependant, dirname() récupère le chemin du serveur. Est-ce la méthode recommandée ou existe-t-il une sorte de fonction WordPress pour obtenir un chemin URI plutôt qu'un répertoire chemin?

    public function admin_head()
    {
        // Let's include the Control Panel CSS
        $url = dirname( __FILE__ ) . '/css/cpanel.css';
        $ie = dirname( __FILE__ ) . '/css/cpanel-ie.css';

        // Inject our cPanel styelsheet and add a conditionaly for Internet Explorer
        //      (fixes bugs on my home browser)
        $head = <<<HEAD
    <link rel="stylesheet" href="{$url}" type="text/css" media="screen" />
    <!--[if IE]>
        <link rel="stylesheet" type="text/css" href="{$ie}" media="screen" />
    <![endif]-->
HEAD;

        echo $head; 

        foreach( self::$classes as $class => $obj )
        {
            if ( method_exists( $obj, 'admin_head' ) )
            {
                $obj->admin_head();
            }
        }
    }

-Zack

1
Zack

Voir plugins_url() . Il est parfait et conçu pour créer des liens vers des fichiers dans des dossiers de plug-ins.

PS aussi wp_enqueue_style() pourrait avoir un sens dans le mélange.

2
Rarst

Il existe un autre moyen d'ajouter des commentaires conditionnels à l'aide de l'API de WP:

wp_enqueue_style(
    'my-ie-style',
     get_template_directory_uri() . '/css/cpanel-ie.css'
);

global $wp_styles;
$wp_styles->add_data( 'my-ie-style', 'conditional', 'IE' );

`

6
filosofo

Au départ, je ne pensais pas que c'était possible, mais j'ai ensuite fait quelques recherches et j'ai mis au point la solution suivante, qui fonctionne pour moi sur WordPress 3.1. La partie délicate consistait à récupérer les balises conditionnelles pour IE. Il y a un filtre pour ça!

<?php
/*
Plugin Name: My Plugin
*/
class My_Plugin {
    function My_Plugin() {
        add_action( 'wp_print_styles', array( &$this, 'css_public' ) );
        add_filter( 'style_loader_tag', array( &$this, 'ie_conditional_comments' ), 10, 2 );
    }
    function css_public() {
        wp_enqueue_style( 'my-plugin', plugins_url( '/my.css', __FILE__ ), array(), '1.0' );
        wp_enqueue_style( 'my-plugin-ie', plugins_url( '/my-ie.css', __FILE__ ), array( 'my-plugin' ), '1.0' );
    }
    function ie_conditional_comments( $tag, $handle ) {
        if ( 'my-plugin-ie' == $handle ) {
            $tag = '<!--[if IE]>' . $tag . '<![endif]-->';
        }
        return $tag;
    }
}
$my_plugin = new My_Plugin();

Meilleurs voeux, -Mike

3
mfields