以前まで普通に表示されてたはずのTwitterのWordPress埋め込みが表示されずURLだけ表示されるようになって・・・ 編集画面では見えるのに、公開側だとURLのまま──その多くは oEmbed の「失敗結果」キャッシュ(_oembed_*) が投稿メタに残っているのが原因です。
この記事では 子テーマ不要・置くだけ有効 の MU プラグインで、失敗キャッシュを1日1回自動削除する方法だけを最短で解説します。
目次
対象と前提
- 症状:X(旧Twitter)の埋め込みが公開側だけ表示されない/URLのまま
- 環境例:WordPress 6.x、SWELL、一般的なレンタルサーバー(ConoHa WING等)
- 目的:失敗キャッシュの自動パージで再発を防ぐ
結論(TL;DR)
- 原因の9割はoEmbed失敗の残留キャッシュ。
- MUプラグインを置いて毎日自動削除すれば、自然に再取得されて復旧する。
- 必要時のみ手動トリガで即時パージも可能(管理者限定)。
手順:MUプラグインで「毎日自動パージ」
- SFTP/ファイルマネージャで
wp-content/
配下にmu-plugins
フォルダを作成(存在しなければ新規作成)。
パス:/wp-content/mu-plugins/
oembed-daily-purge.php
というファイルを作り、以下を丸ごと貼り付けて保存。
<?php
/*
Plugin Name: oEmbed Daily Purge
Description: 1日1回、失敗っぽいoEmbedキャッシュを自動削除(必要に応じて全削除モードも可)
Author: you
*/
// スケジュール登録:未登録なら1日1回
add_action('init', function () {
if (!wp_next_scheduled('odp_oembed_daily_purge')) {
wp_schedule_event(time() + 300, 'daily', 'odp_oembed_daily_purge');
}
});
// 実処理(失敗っぽいものだけ削除)
add_action('odp_oembed_daily_purge', function () {
odp_purge_oembed(false); // false=失敗のみ / true=全削除
});
// 手動実行(管理者ログイン中のみ)
// 例: https://example.com/?odp_purge=1 → 失敗のみ削除
// https://example.com/?odp_purge=1&all=1 → 全削除(必要時のみ)
add_action('init', function () {
if (is_user_logged_in() && current_user_can('manage_options') && isset($_GET['odp_purge'])) {
$aggressive = (isset($_GET['all']) && $_GET['all'] === '1');
odp_purge_oembed($aggressive);
wp_die('oEmbed purge done.');
}
});
function odp_purge_oembed($aggressive = false) {
global $wpdb;
$pm = $wpdb->postmeta;
$opt = $wpdb->options;
if ($aggressive) {
// 全oEmbedキャッシュを一掃(アクセス多い時間は避ける)
$wpdb->query("DELETE FROM {$pm} WHERE meta_key LIKE '\\_oembed\\_%'");
} else {
// 失敗っぽいものだけ削除
// - meta_value = 'false'
// - blockquote/iframeを含まない(=URL素のまま等)
$wpdb->query("
DELETE FROM {$pm}
WHERE meta_key LIKE '\\_oembed\\_%'
AND (
meta_value = 'false'
OR (meta_value NOT LIKE '%<blockquote%' AND meta_value NOT LIKE '%<iframe%')
)
");
}
// oEmbed系トランジェントも掃除
$wpdb->query("
DELETE FROM {$opt}
WHERE option_name LIKE '\\_transient\\_oembed\\_%'
OR option_name LIKE '\\_transient\\_timeout\\_oembed\\_%'
");
}
ポイント: MUプラグインは有効化操作が不要。/mu-plugins/
に置いた瞬間から動作します。
動作確認&即時テスト
- すぐに動かして確認したい場合(管理者ログイン中に)
https://あなたのドメイン/?odp_purge=1
… 失敗キャッシュのみ削除https://あなたのドメイン/?odp_purge=1&all=1
… 全oEmbedキャッシュ削除(必要時のみ) - パージ後、問題のページを再読み込み。ページソースに
<blockquote class="twitter-tweet">
が現れればOK。
運用のコツ
- WP-Cronはアクセス時に実行されます。深夜帯に確実に回したい場合は、サーバーのCRONで
wp-cron.php
を1日1回叩く設定を追加すると安定します。 - ConoHa WING等のサーバーキャッシュは別レイヤー。表示が改善しない場合はコントロールパネルからキャッシュを削除。
- URLはtwitter.comを推奨(
x.com
は失敗しがち)。 - 最適化系の遅延/結合で
platform.twitter.com
/widgets.js
がブロックされないよう除外設定を推奨。
よくある質問(簡潔版)
- Q. 既におかしくなっている投稿はいつ直る?
- A. パージ後の再取得タイミングで順次復旧します。急ぐ場合は上の手動トリガ(
?odp_purge=1
)を実行してからページを開いてください。 - Q. 全削除モード(
&all=1
)は常用してよい? - A. 非推奨。外部再取得が増えるため必要時のみ、アクセスの少ない時間帯に実行してください。
以上。これで 「公開側だけTwitterが出ない」 が勝手に再発しても、毎日自動で自衛できます。困っている人の助けになれば幸いです。