web-dev-qa-db-ja.com

コアメソッドを変更/拡張/オーバーライドするにはどうすればいいですか?

これが私の最初の投稿です。どうぞよろしくお願いいたします。

コンテキスト

スタイルをエンキューするときに、CSSリンクを条件付きコメントに出力できます。

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

次のようなコードが生成されます。

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

これはWP_Stylesクラスのdo_item()メソッド(class.wp_styles.php)によって行われます。

ゴール

条件値に "anticonditionnal"パラメータを追加したいのですが….

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

これを出力できるようにするには( "ネストしたコメント"):

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

「コアメソッドの変更方法」について検索しましたが、解決策が見つかりませんでした... :(

今のところ、フックでそれを行うことができますが、「引数」はありません。スタイルシートと条件はハードコーディングされています...

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

これは主に私のために私の知識を向上させ、WordPressに深く飛び込む機会です!

何か案が?

ありがとうございました...

tM

4
thierrymichel

Toschoによる類似の答え がすでにあります 。これに基づいて、そしてWP_StylesWP_Dependenciesを拡張する_WP_Dependencyを見ると、それがうまくいかない理由はわかりません。

extra-conditionalとして追加されたものは何でも、スローされます:

// ~/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_Dependencyadd_data()を次のように定義します。

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

そしてWP_Dependenciesadd_data()を次のように定義します。

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

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