J'essaie d'exécuter une action après l'approbation d'un commentaire. Cette action consiste à enregistrer automatiquement le commentateur à l'aide de register_new_user
, en utilisant le nom du commentateur en tant que nom d'utilisateur et l'adresse électronique en tant que courrier électronique de l'utilisateur.
Et un mot de passe généré automatiquement à l'aide de wordpress et le nouvel utilisateur reçoit par courrier électronique ses coordonnées, ce qui, je pense, est supposé se produire lors de l'utilisation de register_new_user
.
Cependant, cela ne fonctionne pas. Quelque chose ne va pas avec mon code mais je ne sais pas quoi.
Normalement, en javascript, je pouvais le tester en utilisant alert. En css, c'est aussi facile à tester. Cependant, je ne sais pas comment tester cela car l'action ne se produit pas tant que vous n'avez pas approuvé le commentaire.
Donc, ce que j'ai besoin de savoir, c'est comment puis-je tester pour voir si le code dans functions.php
fonctionne même?
Mon formulaire de commentaire (comments.php
):
args = array(
'comment_field' => '<div class="form-group the-comment-form"><label for="comment" class="custom-avatar">' . $useravatar_custom .
'</label><div id="' . $textareaId . '"><textarea id="comment" class="form-control" name="comment" cols="45" rows="8" aria-required="true" placeholder="Join the discussion..."></textarea></div></div>',
'fields' => apply_filters( 'comment_form_default_fields', array(
'author' =>
'<div class="form-group comments-name">' .
'<label for="author">' . __( 'Username', 'usertheme' ) . '</label> ' .
( $req ? '<span class="required">*</span>' : '' ) .
'<input id="author" name="author" class="form-control" type="text" value="' . esc_attr( $commenter['comment_author'] ) .
'" size="30"' . $aria_req . ' /></div>',
'email' =>
'<div class="form-group comments-email"><label for="email">' . __( 'Email', 'usertheme' ) . '</label> ' .
( $req ? '<span class="required">*</span>' : '' ) .
'<input id="email" name="email" class="form-control" type="text" value="' . esc_attr( $commenter['comment_author_email'] ) .
'" size="30"' . $aria_req . ' /></div>'
Mon code dans functions.php
:
function reg_anon_user_auto($comment_ID, $comment_approved) {
if( 1 === $comment_approved ){
$userdata = array(
'user_login' => sanitize_user($_POST['author']),
'user_email' => sanitize_email($_POST['email']),
'role' => 'subscriber',
'show_admin_bar_front' => false
);
$user_id = register_new_user( $userdata ) ;
// On success.
if ( ! is_wp_error( $user_id ) ) {
wp_redirect( get_permalink() );
exit;
}
} //end if
} //end function
add_action( 'comment_post', array( $this, 'reg_anon_user_auto' ), 10, 2 );
Évidemment, quelque chose comme ça ne fonctionnera pas car vous ne pouvez pas alerter en php:
function reg_anon_user_auto($comment_ID, $comment_approved) {
if( 1 === $comment_approved ){
$userdata = array(
alert("yep it's working code")
);
$user_id = register_new_user( $userdata ) ;
// On success.
if ( ! is_wp_error( $user_id ) ) {
wp_redirect( get_permalink() );
exit;
}
} //end if
} //end function
add_action( 'comment_post', array( $this, 'reg_anon_user_auto' ), 10, 2 );
Alors, comment puis-je tester pour voir pourquoi mon code ne fonctionne pas?
Pour vérifier les valeurs de vos variables, vous pouvez utiliser var_dump ou print_r ( enveloppé dans <pre></pre>
semble mieux) vous pouvez également activer déboguer pour WordPress et utiliser error_log pour écrire dans le fichier debug.log.
Maintenant, pour que l'action soit déclenchée manuellement, utilisez do_action :
do_action( 'comment_post' );
tenez compte du fait que vous déclenchez ceci manuellement afin que les variables attendues n'existent pas dans votre cas, vous devrez peut-être les envoyer manuellement aussi comme ceci:
$comment_ID = 12;
$comment_approved = 1;
do_action( 'comment_post' , $comment_ID, $comment_approved );
Pour les utiliser dans votre cas, var_dump ressemble à print_r et à une alert
ou un console.log
veuillez lire les pages liées à chacune d’elles, tout d’abord vérifier si votre fonction est appelée:
function reg_anon_user_auto($comment_ID, $comment_approved) {
//Here we call var_dump to check if this function was called at all
var_dump("Test i was called");
if( 1 === $comment_approved ){
$userdata = array(
'user_login' => sanitize_user($_POST['author']),
'user_email' => sanitize_email($_POST['email']),
'role' => 'subscriber',
'show_admin_bar_front' => false
);
$user_id = register_new_user( $userdata ) ;
// On success.
if ( ! is_wp_error( $user_id ) ) {
wp_redirect( get_permalink() );
exit;
}
} //end if
} //end function
ou vous pouvez utiliser print_r("Test i was called");
Corrigé dans votre code :
function reg_anon_user_auto($comment_ID, $comment_approved) {
if (1 === $comment_approved) {
$the_comment = get_comment( $comment_ID );//we get the comment
$user_login = sanitize_user($the_comment->comment_author);//we get the author of the comment
$user_email = sanitize_email($the_comment->comment_author_email);//we get the email of the comment
$user_id = register_new_user($user_login,$user_email);//we create the new user
// On success.
if (!is_wp_error($user_id)) {
wp_redirect(get_permalink());
exit;
}
} //end if
}//end function
l'action 'comment_post'
est déclenchée lorsqu'une publication est créée. Il n'y a donc pas de $_POST['author']
ni $_POST['email']
, vous devez obtenir ces valeurs à partir du comment object
; le register_new_user
n'accepte également pas un tableau, ses 2 chaînes.