2017-01-26 3 views
0

私は、ユーザーがキャリッジリターンでテキストを入力するWordpressカスタムフィールドを見ています。wpautopのおかげで<br/>に変換されます。私は次に何をする必要がどのようなPHPとRegexを使ってWordpressページコンテンツの各行にマークアップを追加する

<?php echo wpautop(get_post_meta(get_the_ID(), 'customfield' , true)); ?> 

個々の行にいくつかのスタイルを適用するためには、このようにして得られた各ラインに<span>を追加することです。

私はpreg_replaceと正規表現をしようとしているが、これは動作しません:

<?php 
$subject = wpautop(get_post_meta(get_the_ID(), 'text1' , true)); 

$result = preg_replace('/(.*<br>)*/m', '<span>$1</span>', $subject); 
?> 

<div><?php echo $result; ?></div> 

...それは<span>タグ内のすべての単一の文字をラップするので!

この問題は何ですか?'/((.*)<br>)*/m'

PHPでこれを行うより良い方法がありますか?get_post_metaを傍受していますか?ここで

+0

'$ subject'の内容は何ですか?あなたは何を得て、何を期待していますか?あなたのお手伝いをしたい場合は、質問を編集してこれらの情報を追加してください。 – Toto

+0

'$ subject'の内容は明らかに' get_post_meta'によって返されます。これは上記で説明したように、「
に変換されるキャリッジリターンのテキスト」で構成されています。これ以上何もない。 – nico

+0

デフォルトのカスタムフィールドを使用するACF(高度なカスタムフィールド)プラグインinstedを使用することをお勧めします。 –

答えて

2

は、あなたの正規表現は次のとおりです。

$result = preg_replace('/(.*<br>)*/m', '<span>$1</span>', $subject); 

1 - 2番目の*を削除:

$result = preg_replace('/(.*<br>)/m', '<span>$1</span>', $subject); 

2 - あなたの例では、あなたが<br/>を持っているコメントではなく、<br>、スラッシュはオプションます

$result = preg_replace('/(.*<br\/?>)/m', '<span>$1</span>', $subject); 

3 - にする.*貪欲ではない.*?

$result = preg_replace('/(.*?<br\/?>)/m', '<span>$1</span>', $subject); 

4 - スラッシュをエスケープ避けるために、区切り文字を変更します。

$result = preg_replace('~(.*?<br/?>)~m', '<span>$1</span>', $subject); 

5 - スラッシュの前に存在しているスペースことがあります

$result = preg_replace('~(.*?<br\s*/?>)~m', '<span>$1</span>', $subject); 

6 - 試してみてください。

+0

残念ながら、それはまだ動作しません!多分、私の側には何か別のものがあります。私は[this](https://regex101.com/r/1eWXdV/1)が信頼できるかどうかはわかりませんが、正規表現はさまざまなバリエーションであっても正常に動作します。 – nico

+0

待って、私は/ mマルチラインスイッチが私のために間違っていると思うので、私は正規表現が各行で動作するようにしたい。 regex101によると、/ gスイッチは機能しますが、私のWebページで/ gは "unknown modifier"として拒否されます。これはどうやってできますか? – nico

+0

@nico:何がうまくいかない?何を手に入れますか? – Toto

関連する問題