Comment puis-je configurer WordPress en lecture seule?
J'ai une configuration qui met à l'échelle les instances d'esclaves avec un accès en base de données en lecture seule, mais je vois beaucoup de données de journal dans lesquelles WordPress tente toujours d'écrire dans la base de données.
update_{post_type}_metadata
, set_transient
, wpdb
... il serait idéal d’arrêter quoi que ce soit qui tenterait d’écrire. Je peux facilement vérifier si je suis sur une instance MASTER par rapport à une instance SLAVE afin de pouvoir modifier les hooks assez tôt.
Essayer de court-circuiter la fonction de métadonnées de mise à jour semble éventuellement éliminer un vecteur, mais je crains que le reste ne concerne la modification de WP Core.
add_filter ( 'update_post_metadata', '__return_false', 99 );
$result = update_post_meta( -1, 'test-key', 'test-value' );
echo $result;
Aucune suggestion?
HyperDB semble prometteur comme solution à plus long terme.
WordPress ne fonctionne pas bien en mode lecture seule. Cela dépend de la base de données pour le cache et d'autres tâches.
Cependant, il existe plusieurs options si vous souhaitez continuer.
Fonction à utiliser:
/**
* 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' );