web-dev-qa-db-fra.com

Comment faire en sorte que le plugin WordPress vérifie les modifications de la base de données et ensuite faire quelque chose?

Comment puis-je par exemple vérifier si un nouveau commentaire est écrit dans la base de données et ensuite faire en sorte que mon plug-in enregistre le changement? Je vais utiliser cette information pour faire quelque chose dans la base de données avec mon plugin.

Toute aide appréciée. Impossible de trouver quoi que ce soit concernant cette question.

2
slider2013

En vérifiant les colonnes date:

Pour ne vérifier que les nouveaux commentaires, les nouvelles publications, etc., vous pouvez créer un travail cron, puis consulter le comment_date, post_date, etc. pour déterminer si quelque chose de nouveau est apparu dans ces tableaux. Enregistrez un dernier horodatage vérifié du travail cron, de sorte que toute ligne avec une variable date supérieure à celle du dernier horodatage vérifié constitue une nouvelle insertion.

Utilisation de crochets de filtre/action pour l'API WordPress:

WordPress déclenche certains points d'ancrage filtre/action avant/après les modifications de la base de données.

Habituellement, les hooks d'action sont activés après que une action de base de données est terminée. Souvent, ces hooks ont un préfixe/suffixe du nom comme added/update/updated/deleted/save/insert etc. Malheureusement, les noms des hooks WordPress ne sont pas cohérents, sinon cela aurait été beaucoup plus facile.

Par exemple, comment API lance les points d’action suivants après les modifications de la base de données:

  • wp_insert_comment: se déclenche après l'insertion d'un commentaire dans la base de données.
  • deleted_comment: se déclenche après la suppression d'un commentaire de la base de données.
  • trashed_comment: se déclenche après le déplacement d'un commentaire dans la corbeille.
  • untrashed_comment: se déclenche lorsqu'un commentaire est sorti de la corbeille.
  • spammed_comment: se déclenche après qu'un commentaire est marqué comme spam.
  • unspammed_comment: se déclenche après qu'un commentaire (précédemment marqué comme spam) ne soit plus marqué comme spam.
  • edit_comment: se déclenche après la mise à jour/la modification d'un commentaire.
  • comment_closed: se déclenche après qu'un message soit marqué comme n'autorisant pas les commentaires.

Exemple de code avec un crochet d'action:

add_action( 'wp_insert_comment', 'wpse_comment_inserted' );
function wpse_comment_inserted( $comment_id, $comment_object, 99, 2 ) {
    // comment with id $comment_id is inserted into the database,
    // do something with it here
}

Il existe de nombreux autres crochets de filtre et crochets d'action qui s'exécutent avant/après les modifications de la base de données. Utilisez-les selon vos besoins.

L'avantage d'utiliser ces crochets est que, comme ils font partie du noyau de WordPress, vous n'avez pas à vous soucier des changements internes. L'inconvénient est cependant qu'il peut y avoir des plugins/thèmes qui n'utilisent pas ces API principales, mais exécutent leurs requêtes construites sur mesure. Vous ne pourrez donc pas détecter les modifications de base de données.

En utilisant le crochet de filtre query:

Il est également possible de suivre les requêtes d'insertion/mise à jour/suppression effectuées via l'API WordPress $wpdb. Toute requête de base de données utilisant l'API de base de données WordPress utilise $wpdb (une instance de la classe wpdb). Toutes les requêtes (y compris insérer, mettre à jour et supprimer) déclenchent query filter hook . Donc, en utilisant ce crochet, vous pouvez filtrer toutes les requêtes juste avant leur exécution.

Toutefois, cela ne fonctionnera pas si un thème/plug-in crée des requêtes de base de données personnalisées en dehors de l'API WordPress $wpdb ou si une requête principale s'exécute avant le chargement du plug-in ou si une application externe effectue les modifications via des requêtes SQL personnalisées.

En étendant la classe wpdb:

En outre, il est possible de créer un fichier db.php, DANS LE RÉPERTOIRE wp-content (ou de créer un lien souple dans wp-content à partir d'un plugin) et d'étendre la classe wpdb à partir de là. De cette façon, vous pouvez améliorer n’importe quelle méthode de la classe wpdb et suivre les requêtes d’insertion/mise à jour/suppression à partir de là.

En utilisant le déclencheur de base de données:

Toutefois, pour suivre toute modification de la base de données à l’aide d’une requête SQL, le seul moyen fiable et complet consiste à créer déclencheurs lors de l’activation du plug-in, puis à suivre les modifications apportées à la base de données par le biais du déclencheur. Toutefois, pour pouvoir effectuer cette opération à partir d'un plug-in, les informations d'identification de la base de données que vous utilisez pour WordPress doivent disposer du privilège de déclenchement en création/suppression.

Attention: Trop de déclencheurs peuvent ralentir les requêtes DB. Assurez-vous également de nettoyer les déclencheurs au moment de la désactivation du plug-in.

5
Fayaz

Si vous voulez que quelque chose se passe lorsqu'un commentaire est enregistré (posté) par le commentateur, vous voulez utiliser le filtre preprocess_comment (voir Plugin API/Référence de filtre/préprocess commentaire ).

function preprocess_comment_handler( $commentdata ) {
    //some code
    return $commentdata;
}
add_filter( 'preprocess_comment' , 'preprocess_comment_handler' );

Ajoutez simplement du code pour tout ce que vous voulez quand un commentaire est enregistré. Placez ce bloc de code dans votre functions.php (dans un thème enfant, de sorte qu'une mise à jour de thème ne remplace pas votre code).

2
Rick Hellewell