web-dev-qa-db-ja.com

The_excerpt()とthe_content()の出力にHTMLを追加するにはどうすればいいですか?

最初の文字にドロップキャップを追加する必要があるテーマを作成しています。これは、問題の文字を<span class="dropcap>および</span>で囲むことによって行われます。 dropcapを作成する実際の作業は、 AdobeのDropcap.js を使用して行われます。

確かにthe_excerpt()の出力に対してこれを行いたいと思います。さらに、このspanタグを、H3要素の兄弟であるすべてのParagraph要素の最初の文字(h3 + p)に追加したいと思います。

私の好みは、ドキュメントを解析して挿入するJavaScriptまたはjQueryスクリプトを書くのではなく、PHPでこれを行うことです。

これまでのところ、the_excerpt()を使ってこれをテストしただけで、割り当てられたメモリが枯渇したという致命的なエラーが発生するという全くの失敗でした。しかし、これはコードです:

if ( ! function_exists( 'test_excerpt_dropcap' ) ) :
function test_excerpt_dropcap() {
    global $post;
    $the_excerpt = get_the_excerpt();
    if ( is_singular() && has_excerpt() ) {
        $the_excerpt = 
        preg_replace('/^(.)/', '<span class="dropcap">\1</span>', $the_excerpt);
    }
    return $the_excerpt;
}
add_filter( 'get_the_excerpt', 'test_excerpt_dropcap' );
endif;
1
Cedon

get_the_excerpt()は抜粋を返しますが、それにget_the_excerptフィルタを適用した後でのみ を返します 。あなたのフィルタハンドラが無限の深さまで呼ばれるので、これは無限の再帰を引き起こします。

もちろん、最善の解決策はcssです(@ spacegrrlの答えを参照)が、それを<span>にしておく理由がある場合は、その抜粋をパラメータとしてハンドラに渡すことができます。 get_the_excerpt()を呼び出す代わりに、$the_excerptパラメータを追加して使用するだけです。

1
geomagas

あなたはCSSだけでこれをすることができるかもしれません。

抜粋を選択できるクラスがあれば、さらにCSS擬似クラスを使用して最初の段落の最初の文字を選択できます。

.excerpt p:first-of-type::first-letter {
   /* dropcap styling */
}

先頭文字先頭文字

兄弟セレクタを使用すると、2番目のタスクでは、h3ごとに最初のpタグを取得できます。

.content h3 + p::first-letter {
   /* dropcap styling */
}

隣接兄弟セレクタ

0
spacegrrl