it-swarm.com.de

Beste Weg, um CSS in admin_head in Plugins zu injizieren?

Ich bin auf der Suche nach der besten Möglichkeit, CSS in den Admin-CP von WordPress einzufügen.

Derzeit verwende ich den Aktions-Hook admin_head und in diesem Hook verwende ich dirname( __FILE__ ), um das Verzeichnis für die Stylesheets abzurufen. dirname() ruft jedoch den Pfad des Servers ab. Ist dies der empfohlene Weg oder gibt es eine Art WordPress-Funktion, um einen URI-Pfad anstatt eines -Verzeichnisses zu erhalten?path?

    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

Siehe plugins_url() . Es ist perfekt und darauf ausgelegt, auf Dateien in Plugin-Ordnern zu verlinken.

PS auch wp_enqueue_style() könnte in der Mischung Sinn machen.

2
Rarst

Es gibt eine andere Möglichkeit, mit der API von WP bedingte Kommentare hinzuzufügen:

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

Ich habe ursprünglich nicht gedacht, dass dies möglich ist, aber dann habe ich ein bisschen gegraben und mir die folgende Lösung ausgedacht, die für mich unter WordPress 3.1 funktioniert. Der knifflige Teil bestand darin, die bedingten Tags für IE einzuspielen. Es gibt einen Filter dafür!

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

Beste Grüße, -Mike

3
mfields