web-dev-qa-db-fra.com

Intercepter le formulaire de commentaire soumettre/liste par hook/filter

J'écris un plugin multimédia qui utilise des tables personnalisées pour stocker son contenu. (par exemple, pas les tables de poste où wordpress stocke les données de pièces jointes). Maintenant, je cherche un moyen d'utiliser le système de commentaires wordpress par défaut pour ajouter des commentaires. (Ces commentaires ne figureront pas dans la table de commentaires standard, mais également dans une table personnalisée.

J'ai besoin de deux choses:

  1. Un point d'accroche qui me permet d'intercepter le commentaire soumis et de le traiter avec mon propre code si les critères sont remplis. Les critères eux-mêmes sont arbitraires et sans importance, ils nécessitent simplement un moyen d'obtenir les données de publication avant que Wordpress les traite.
  2. Un filtre qui me permet de remplacer les données wp_list_comments () par mes propres tabledata.

Je sais que c'est une idée loufoque, mais la table des messages et des pièces jointes est trop contraignante pour ce dont j'ai besoin. Des idées?

1
Patriek

wp_list_comments() n'a pas de filtres ni de crochets, donc ça va être un peu difficile, vous pouvez utiliser le crochet de filtre comments_array

add_filter('comments_array','my_custom_comments_list');
function my_custom_comments_list($comments, $post_id){
    //if criteria are met
    //pull your comments from your own table
    //in to an array and return it.
    return $my_comments;
    //else return $comments
}

et comme pour "intercepter le commentaire soumettre et traiter" la réponse des puces serait la meilleure façon en utilisant le crochet de filtre preprocess_comment mais vous voulez pouvoir éviter que le formulaire WordPress insère également le commentaire dans la table par défaut, vous pouvez donc utiliser le crochet d’action wp_insert_comment pour le supprimer. le commentaire de la table par défaut juste après son insertion:

add_action('wp_insert_comment','remove_comment_from_default_table');
function remove_comment_from_default_table( $id, $comment){
    //if criteria are met
    //and the comment was inserted in your own table
    //remove it from the default table:
    wp_delete_comment($id, $force_delete = true);
}
2
Bainternet

Essayez d’utiliser le crochet de filtre preprocess_comment, par exemple.

function my_handling_function( $comment_data ) {
     // Here, do whatever you need to do with the comment
     // modify it, pull data out of it to save somewhere
     // or whatever you need to do
     // just be sure to return $comment_data when you're done!
     return $comment_data;
}
add_filter( 'preprocess_comment', 'my_handling_function' );
4
Chip Bennett