現在プラグインを開発中ですが、問題が残っています。 私は(私はプラグインの更新メカニズムを介して、後で実装)phpMyAdminにを通して私のデータベースにSQL要求を実行し、要求がこのように見えた:あなたが見ることができるようにWordpress:キャッシュされたオプション値をフラッシュする方法
UPDATE `wp_options`
SET `option_value` = replace(`option_value` , 'model', 'ldp_model')
WHERE `option_name` LIKE 'ldp_container%'
、私は始まる名前を持つすべてのオプション値を更新しています'ldp_container'による。私はオプションの値を取得していたときに、後にコードの実行中に、私が使用してfalse
された値を取得しています:
$termId = $term->term_id;
$termMeta = get_option("ldp_container_$termId"); // $termMeta = false
を私はこの問題に見て、私は私が更新したときと思われるポイントになりました/代わりに
update_option("ldp_container_$termID", $termMeta, false);
の
update_option("ldp_container_$termID", $termMeta);
をalloptions
キャッシュの一部となり、このオプションの値:Iが使用されるように、このオプションを作成します。だから、それを取得することは今や常にfalseを返し、私はこのキャッシュをどのようにフラッシュするか分からない。バージョン番号に基づいて、プラグインの更新メカニズムを使用して
は、私が使用してWordpressのオブジェクトキャッシュをフラッシュしようとした:
$flush_cache = wp_cache_flush(); // returns true
とデータベースのクエリキャッシュすぎ:
$wpdb->flush();
私も明示的に削除しようとしましたこれらのオプションは、クエリを使用してキャッシュからキーを呼び出し、結果をループしてwp_cache_deleteを呼び出します。
$result = $wpdb->get_results(
"SELECT 'option_name'
FROM $wpdb->options
WHERE 'option_name' LIKE '%ldp_container_%';"
);
foreach ($result as $current) {
wp_cache_delete($current, 'options');
}
まだ、運はありません。
誰かが私のための手がかりを持っていますか?
おかげで、
EDIT:私のエラーはどこか別の場所であるように
は思えます。アトムとはXdebugを使用して、いくつかのデバッグ後
、その問題は次のようにファイル/wp-includes/option.phpでデータベースから取得した文字列に適用されるアンシリアライズ方法であることを指摘:
return apply_filters('option_' . $option, maybe_unserialize($value));
使用
if (is_serialized($original)) // don't attempt to unserialize data that wasn't serialized going in
return unserialize($original);
return $original;
それは偽、その後、偽の値がキャッシュされている返すので、アンシリアライズへの呼び出しが...、失敗し
:
maybe_unserializeはそれを行いますオンラインのunserializerは文字列が正しくないことを確認しますが、なぜ私はまだ取得できません。
これはドキュメントを見てからちょうど推測ですが、どのように 'wp_cache_delete(「alloptions」、「オプション」)について;'。私はこれをテストしていません。https://developer.wordpress.org/reference/functions/wp_load_alloptions/とhttp://codex.wordpress.org/Function_Reference/wp_cache_deleteから推測してください –