2017-06-07 1 views
0

私は通常、wordpressの会社名の各インスタンスを置き換えようとしていますが、時々(通常はリンクのhrefに)リンクを壊している問題にぶつかりました。私が使用しているstr_replaceのhtml属性を除外します

コードが

//Replace the word lunch with a span 
function replace_text_wps($text){ 
    $replace = array(
     // 'WORD TO REPLACE' => 'REPLACE WORD WITH THIS' 
     'lunch!' => '<span class="lunch">lunch!</span>', 
     'Lunch!' => '<span class="lunch">lunch!</span>', 
     'LUNCH!' => '<span class="lunch">lunch!</span>' 
    ); 
    $text = str_replace(array_keys($replace), $replace, $text); 
    return $text; 
} 

add_filter('the_content', 'replace_text_wps'); 
add_filter('the_excerpt', 'replace_text_wps'); 
add_filter('the_title', 'replace_text_wps'); 
add_filter('acf_the_content', 'replace_text_wps'); 

のみのhrefタグのようなものの外にそれを交換する方法はあります(ACFカスタムフィールドのためのフィルタを含みますか)?私はDOMパースのようなものを調べましたが、単純なメソッドがあるかどうかはわかりません。他のインスタンスでも悲しみを引き起こすようには見えないので、HMTL全体を処理し、言葉は適切です。前と後のスペースを含む文字列を検索するのは不思議でしたが、先頭と末尾のスペースをどのように含めるかわからず、ちょっとした気分になりましたか? ありがとうございます! Pete

答えて

1

ok、この例では非常に具体的なので、次のコードが十分に機能することがわかりました。最初のマッチングパラメータに後続/先行スペースを追加しました。また、スペースを含むhtmlタグの直後にそれを見つけるための亜種も追加しました。 エレガントではありませんが、目的には十分です。

function replace_text_wps($text){ 
    $replace = array(
     // used mid-line 
     ' lunch! ' => ' <span class="lunch">lunch!</span> ', 
     ' Lunch! ' => ' <span class="lunch">lunch!</span> ', 
     ' LUNCH! ' => ' <span class="lunch">lunch!</span> ', 
     // used at end of lines 
     ' lunch!' => ' <span class="lunch">lunch!</span>', 
     ' Lunch!' => ' <span class="lunch">lunch!</span>', 
     ' LUNCH!' => ' <span class="lunch">lunch!</span>', 
     // used inside html tags like headers 
     '>lunch!' => '><span class="lunch">lunch!</span>', 
     '>Lunch!' => '><span class="lunch">lunch!</span>', 
     '>LUNCH!' => '><span class="lunch">lunch!</span>', 
     //used directly after html tags 
     '> lunch!' => '> <span class="lunch">lunch!</span>', 
     '> Lunch!' => '> <span class="lunch">lunch!</span>', 
     '> LUNCH!' => '> <span class="lunch">lunch!</span>', 
     //exclude alt tags on images, title attributes etc 
     '"lunch!' => '"lunch!', 
     'lunch!"' => 'lunch!"', 
     '"Lunch!' => '"lunch!', 
     'Lunch!"' => 'lunch!"' 
    ); 
    $text = str_replace(array_keys($replace), $replace, $text); 
    return $text; 
} 
add_filter('the_content', 'replace_text_wps'); 
add_filter('the_excerpt', 'replace_text_wps'); 
add_filter('the_title', 'replace_text_wps'); 
add_filter('acf_the_content', 'replace_text_wps'); 
+0

待ち時間がなくなったら、問題が解決されたことを誰もが理解できるように、回答を受け入れてください。もちろん、誰かがより良い解決策を思い付くのを待っている場合を除きます。 – Christoph

関連する問題