it-swarm-ja.com

Wp_enqueue_style()でスタイルシートに 'title'属性を追加

あなたが私がコアで中断したところから始めたいならば、以下を読んでください。しかし基本的な質問は、私のスタイルシートに "title"属性を追加する必要があり、wp_enqueue_style()はそのパラメータを許可していないことです。ハード埋め込み以外に、WordPressでスタイルシートにタイトルを追加できる方法はありますか?

コアを掘り下げてみると、$titleを使って設定できる$style->extra['title']変数があることに気付きました。

$title = isset($this->registered[$handle]->extra['title']) ? "title='" . esc_attr( $this->registered[$handle]->extra['title'] ) . "'" : '';

(class.wp-styles.php)

また$ titleは、スタイルシートをエンキューするときに適用されるフィルタにも含まれます。それでは、どのようにしてスタイルオブジェクト内でその「追加の」配列を設定できますか。

6
Tom Auger

さて、ここで私は解決策を得ています。

wp_enqueue_style( 'my-handle', 'mystyle.css' );
global $wp_styles;
$wp_styles->add_data( 'my-handle', 'title', 'my_stylesheet_title' );

グローバルを使うのが嫌いです。もっと良いものはありますか?

4
Tom Auger

あなたの投稿のclass.wp-styles.phpで言及したファイルを見ると、$tag .= apply_filters( 'style_loader_tag', "<link rel='$rel' id='$handle-css' $title href='$href' type='text/css' media='$media' />\n", $handle );という行があります。そのため、 "style_loader_tag"フィルタにフックしてtitleタグを追加することができます。私もあなたの答えが好きですが、グローバルを使うことに問題があるかどうかわからないので、どちらが良いのかはっきりしません。

2

Style_loader_tagを使用することもできるようです。 style_loader_tag script_loader_tag APIの両方の詳細については、他の回答を参照してください。
wp_register_styleにcrossoriginとintegrityを追加するにはどうすればいいですか? (フォント素晴らしい5)

style_loader_tagは公式のWordPress APIです。ドキュメントを見てください: https://developer.wordpress.org/reference/hooks/style_loader_tag/

apply_filters( 'style_loader_tag', $html, $handle, $href, $media )
キューに入れられたスタイルのHTMLリンクタグをフィルタリングします。



まず、あなたのスタイルシートをキューに入れます

function add_styles() {
    // Example loading external stylesheet, could be used in both a theme and/or plugin
    wp_enqueue_style( 'font-awesome-5', 'https://use.fontawesome.com/releases/v5.5.0/css/all.css', array(), null );

    // Example theme
    wp_enqueue_style( 'font-awesome-5', get_theme_file_uri( '/assets/css/fontawesome.min.css' ), array(), null );

    // Example plugin
    wp_enqueue_style( 'font-awesome-5', plugins_url( '/assets/css/fontawesome.min.css', __FILE__ ), array(), null );
};
add_action( 'wp_enqueue_scripts', 'add_styles' );



次に、style_loader_tagを使用します
特定のスタイルシートにタイトルを追加するには、style_loader_tagを使用してください。

function add_stylesheet_attributes( $html, $handle ) {
    if ( 'font-awesome-5' === $handle ) {
        return str_replace( "rel='stylesheet'", "rel='stylesheet' title='something'", $html );
    }
    return $html;
}
add_filter( 'style_loader_tag', 'add_stylesheet_attributes', 10, 2 );
1
Remzi Cavdar

私はstyle_loader_tagでその方法を使いました。それによって私は私の追加のtitle-tagを輸送するためのハンドルを誤用しました。これは次のようになります。

// Enqueue style
wp_enqueue_style( 'twentytwelve-style-Xstyle1', get_stylesheet_uri() );

// my filter function
add_filter('style_loader_tag', 'my_style_loader_tag_function');

function my_style_loader_tag_function($tag){
    $customXML = new SimpleXMLElement($tag);
    $id = (string)$customXML->attributes()->id;
    $values = explode('-X',$id);
    if(!isset($values[1])){
        return $tag;
    }
    $customXML->attributes()->id = $values[0].'-css';
    $title = str_replace('-css', '', $values[1]);
    $customXML->addAttribute('title', $title);
    $dom = dom_import_simplexml($customXML);

    return $dom->ownerDocument->saveXML($dom->ownerDocument->documentElement);
}

だから私は-Xを探し、その文字列の後はすべて私のtitle属性です。

0
testing