関連記事
- WordPress6.3でクラシックブロックが改悪されてゴミになった&属性「fetchpriority」はタグ「amp-img」で使用できません。エラー
- jQueryを使わず20行以内でWordPressにLightbox機能を実装する
Search Regexを毎回走らせるのが面倒
Search Regexでよく使う正規表現をまとめたはいいのですが、Spreadsheetからコピペする度に実行するのに疲れました。
記事投稿時のfilterに関数をhookして処理をするようにします。
wp_insert_post_dataが受け取るpost_contentはダブルクォートがエスケープされている
かなりハマったのですが、フィルターwp_insert_post_dataが受け取る配列引数の中のpost_contentはなぜかダブルクォートの前にバックスラッシュを付けてきます。
var_dumpするとこんな感じ→『”』
なのでまずはバックスラッシュを消して普通のダブルクォートに置換しないとダブルクォートを含む正規表現が通りません。
functions.php
add_filter('wp_insert_post_data', 'modifyPostData');
function modifyPostData($data)
{
$data['post_content'] = preg_replace('/"/', '"', $data['post_content']);
$data['post_content'] = preg_replace('/<td data-[^>]+?>/', '<td>', $data['post_content']);
$data['post_content'] = preg_replace('#<a class="in-cell-link"[^>]+?href="([^>]+?)"[^>]+?">#', '<a href="$1">', $data['post_content']);
$data['post_content'] = preg_replace('#<span]+?">([sS]+?)</span>#', '$1', $data['post_content']);
$data['post_content'] = preg_replace('#<strong]+?">([sS]+?)</strong>#', '<strong>$1</strong>', $data['post_content']);
$data['post_content'] = preg_replace('/<a]+?" /', '<a ', $data['post_content']);
return $data;
}
$data['post_content'] = preg_replace('/"/', '"', $data['post_content']);
でエスケープされたダブルクォートを普通のダブルクォートに置換しているので、後は通常通りpreg_replaceなりなんなりしておけば大丈夫です。
投稿データを書き換えるので、最初に試す時は記事のバックアップを忘れないようにしてください。