本文のpタグの中に文字を追加したい
-
こんにちは
それは WordPress ではなく php の技術で置き換えする他ないと思いますが、最初の P タグの後ろに ★ が来ればいいのであれば、
return preg_replace( '/^<p>/', '<p>★', $content );
という感じでしょうか。他にもやり方はあると思いますが。
こんにちは
以下でどうでしょう?add_filter('the_content', 'hoge',9); function hoge( $content ) { return '★'.$content; }
表示だけでいいのであれば、スタイルで追加するのもいいかもです。
.entry-content p:before { content: "★"; }
的外れな見解でしたら無視してください。
> munyagu(@munyagu)さん
の方法を試しましたが置換されませんでした。
何か間違いがあるでしょうか。// テンプレート内 apply_filters('hoge', the_content());
// function.php内 add_filter('hoge', 'my_func', 10, 1); function my_func($content){ return preg_replace( '/^<p>/', '<p>★', $content ); }
> nobita(@nobita)さん
ありがとうございます。
ただ、pタグの外に出力されます。
なお、趣旨と外れますが、the_excerpt()だと
謎の空白も入りますがpタグの内側になりました。> ishitaka(@ishitaka)さん
ありがとうございます。
それが一番簡単で確実かもしれません。
完成したHTMLをテーマ化している途中なので、
一度仕上げたCSSを変更しないで済む方法があるのか試行錯誤していました。
ただ、どうしても無理そうなら、その方法で実現します。- この返信は4年、 12ヶ月前にyukiが編集しました。
ただ、pタグの外に出力されます。
wpautop()は、default-filters.phpでプライオリティが10でフィルターされているので、9でOKと思いましたが、もっと少ない数値にしてみるとpの内側に入るかもしれません。
要は、wpautop()のフィルターが実行される前に、星を追加すればいいと思うので、、、
CSSでもいいのであれば、その方がいいと思いますが、、、
- この返信は4年、 12ヶ月前にnobitaが編集しました。
> nobita(@nobita)さん
ありがとうございます。
プライオリティを9~0まで試しましたが結果は変わりませんでした。コードから察すると、下記のようなことでしょうか?
// テンプレート内 apply_filters('hoge', the_content());
↓
echo apply_filters( 'hoge', get_the_content() );
// function.php内 add_filter('hoge', 'my_func', 10, 1); function my_func($content){ return preg_replace( '/^<p>/', '<p>★', $content ); }
↓
add_filter( 'hoge', 'my_func' ); function my_func( $content ) { $content = apply_filters( 'the_content', $content ); return preg_replace( '/^<p>/', '<p>★', $content ); }
@yuki84yuki さん
あれ、ごめんなさい。
一つ確認してもいいですか? エディタは、TinyMCEですか、ブロックエディタですか?
TinyMCEだったら、wpautop()をテーマ内で直接使っていないですか?
ブロックエディタだったら、プライオリティいじっても★は、pの外側になるので、
(ブロックエディタの場合は、p要素は投稿にすでに書き込まれているので、常に外になっちゃいます)ブロックエディタなら、
add_filter( 'the_content','my_content'); function my_content($c){ return preg_replace('!<p>!','<p>★',$c,1); }
第三引数は、置換のリミット
CSSなら、
p:first-child:before{ content:'\2605'; }
apply_filters('hoge', the_content());
the_content()は、間違いです echo する関数ではなく、get_the_content()等 returnする関数を使ってください。
ちなみに「’!<p>!’」という正規表現は何を表しているのでしょうか?
試しに「’/^<p>/’」を指定すると置換が行われませんでした。単にp要素を表します。
'!^<p>!'
だと、投稿本文の先頭にあるp要素という意味になるんだと思います。ただ、ブロックエディタは、コメントから始まるので、ヒットしないんじゃないかと思います。
以下のように、マルチラインの修飾子をつけてやると、ヒットするかも
add_filter( 'the_content','my_content'); function my_content($c){ return preg_replace('!^<p>!m','<p>★',$c,1); }
詳しくないので、
https://www.php.net/manual/ja/reference.pcre.pattern.modifiers.php
読んでみてください。- この返信は4年、 12ヶ月前にnobitaが編集しました。
- トピック「本文のpタグの中に文字を追加したい」には新たに返信することはできません。