web-dev-qa-db-ja.com

データベースからのみ読み込み、決めて書き込みないようにWordPressを設定する

WordPressを読み取り専用に設定する方法を教えてください。

読み取り専用データベースアクセスでスレーブインスタンスを拡張する設定がありますが、WordPressがまだデータベースに書き込もうとしているログデータがたくさんあります。

update_{post_type}_metadataset_transientwpdb ...基本的に、書き込もうとするものをすべて停止するのが理想的です。私は、MASTERインスタンスとSLAVEインスタンスのどちらにいるのかを簡単に確認できるので、かなり早くフックを変更できます。

メタデータの更新機能をショートさせようとすると1つのベクトルが削除される可能性がありますが、残りの部分ではWP Coreを変更する必要があります。

add_filter ( 'update_post_metadata', '__return_false', 99 );

$result = update_post_meta( -1, 'test-key', 'test-value' );

echo $result;

助言がありますか?


HyperDB は、より長期的な解決策として期待されています。

3
jgraup

WordPressは読み取り専用モードではうまく機能しません。キャッシュやその他のタスクについてはデータベースに依存します。

それでも続行したい場合は、いくつかの選択肢があります。

  1. データベースユーザー権限を「読み取り専用」に設定します。
  2. 関数を使用してすべてのdbクエリをインターセプトします。私達はdbの書き込みを防ぐために私達のテーマデモサイトでこれを使用しました。

使用する機能

/**
 * Whitelist "SELECT" and "SHOW FULL COLUMNS" queries.
 */
function my_readonly_filter( $query ) {
  global $wpdb;

  if ( preg_match( '/^\s*select|show full columns\s+/i', $query ) ) {
    return $query;
  }

  // Return arbitrary query for everything else otherwise you get 'empty query' db errors.
  return "SELECT ID from $wpdb->posts LIMIT 1;";
}
add_filter( 'query', 'my_readonly_filter' );
6
cowgill