web-dev-qa-db-ja.com

The_content()からすべてのインラインスタイルを削除する

私の現在のプロジェクトの1つでは、私は古いWordpressサイトから私のプロジェクトにブログ投稿を転送しなければなりませんでした。

すべての記事がWordからコピー&ペーストされたものであることを確認するまでは順調に進みました。

<span style="font-size: medium; font-family: georgia,palatino;">

そしていくつかの場所でこれらのようなもの:

<p style="text-align: justify;">
<p style="text-align: justify;"><span style="font-size: medium; font-family: georgia,palatino;"><strong><span style="color: #000000;">

だから私はすべての投稿に入り(約100)、それらの不要なタグを削除するだけの40時間(さらに少ない忍耐力)を持っていないので、(おそらくthe_content()を出力する前にtext-decoration:underline)要素を含みます

そんなことありますか?

5
Fredy31

すべてのインラインスタイルを削除したい場合は、単にfunctions.phpに次のコードを追加するだけです。

add_filter('the_content', function( $content ){
    //--Remove all inline styles--
    $content = preg_replace('/ style=("|\')(.*?)("|\')/','',$content);
    return $content;
}, 20);
9
Reza Mamun

これをfunctions.phpに追加するだけです。

 注:このフィルタは投稿の保存/更新時に機能します。 
 add_filter( 'wp_insert_post_data'、 'filter_post_data'、 '99'、2); 
関数filter_post_data($ data、$ postarr){
 
 $ content = $ data ['post_content']; 
 
 $ content = preg_replace( '#<p。*?>(。*?)</p> #i'、 ' <p>\1 </p> '、$ content); 
 $ content = preg_replace('#<span。*?>(。*?)</span> #i '、' <span>\1 </span> '、$ content); 
 $ content = preg_replace('#<ol。*?>(。*?)</ol> #i '、' <ol>\1 </ol> '、$ content); 
 $ content = preg_replace('#<ul。*?>(。*?)</ul> #i '、' <ul>\1 </ul> '、$ content); 
 $ content = preg_replace('#<li。*?>(。*?)</li> #i '、' <li>\1 </li> '、$ $ data ['post_content'] = $ content; 
 
 $ dataを返す; 
} 

 注:このフィルタは、関数the_content()が実行されたときに機能します。 
 add_filter( 'the_content'、 'the_content_filter'、20); 
 
関数the_content_filter($ content){
 $ content = preg_replace( '#<p。 *?>(。*?)</p> #i '、' <p>\1 </p> '、$ content); 
 $ content = preg_replace('#<span。*?> (。*?)</span> #i '、' <span>\1 </span> '、$ content); 
 $ content = preg_replace('#<ol。*?>(。* ?)</ol> #i '、' <ol>\1 </ol> '、$ content); 
 $ content = preg_replace('#<ul。*?>(。*?)</ul> #i '、' <ul>\1 </ul> '、$ content); 
 $ content = preg_replace('#<li。*?>(。*?)</li> #i '、' <li>\1 </li> '、$ content); 
 $ contentを返す; 
} 
5
golchha21

私は保存/更新で上記の方法を試しましたが、私のために働かなかったので私は別のアプローチから行きました。 wp_postsテーブル全体をエクスポートし、Sublimeで開き、正規表現を置き換えました。すべてのケースを見つけるためにstyle="*.*?"を使用し、それらを空に置き換えました。それから古いテーブルの内容を落とし、新しいものをインポートしました。

誰かがこの方法を試してみてください - wp_postテーブルに他の投稿タイプがあり、状況が少し乱雑になった場合に備えて、確実にバックアップを取ってください。

3
alordiel

私はcontent_save_preフィルタをチェックアウトし、そしておそらくその時点でいくつかの派手な正規表現を適用するでしょう。

0
vancoder