WordPressの記事投稿時に正規表現でダブルクォートを含む本文を置換する

関連記事

Search Regexでよく使う正規表現をまとめたはいいのですが、Spreadsheetからコピペする度に実行するのに疲れました。

記事投稿時のfilterに関数をhookして処理をするようにします。

wp_insert_post_dataが受け取るpost_contentはダブルクォートがエスケープされている

wp_insert_post_data バックスラッシュ削除

かなりハマったのですが、フィルター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 style="[^"]+?">([\s\S]+?)</span>#', '$1', $data['post_content']);
    $data['post_content'] = preg_replace('#<strong style="[^"]+?">([\s\S]+?)</strong>#', '<strong>$1</strong>', $data['post_content']);
    $data['post_content'] = preg_replace('/<a style="[^"]+?" /', '<a ', $data['post_content']);

    return $data;
}
$data['post_content'] = preg_replace('/\\"/', '"', $data['post_content']);

でエスケープされたダブルクォートを普通のダブルクォートに置換しているので、後は通常通りpreg_replaceなりなんなりしておけば大丈夫です。
投稿データを書き換えるので、最初に試す時は記事のバックアップを忘れないようにしてください。

関連記事

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL