web-dev-qa-db-fra.com

État d'Ajax Check Post

J'ai cette fonction qui envoie un courriel à tous les utilisateurs qui s'abonnent à un auteur chaque fois que l'auteur crée un nouveau message qui fonctionne bien. J'essaie d'ajaxifier la fonction et de vérifier toutes les quelques secondes si un message a été mis à jour ou si un nouveau message a été publié par un utilisateur. Si tel est le cas, mettez à jour tous les abonnés de cet auteur via une fenêtre de notification "en direct" (ce n'est pas vraiment vivant, mais il semble être en direct comme c'est le cas via la fonction setInterval). Quoi qu'il en soit, toute aide serait grandement appréciée!

Voici la fonction actuelle:

add_action('publish_listings', 'vba_update', 10, 1);
add_action('draft_listings', 'vba_update', 10, 1);
function vba_update($post_id){ 
    $args = array(
        'include'   => tb_get_followers($user_id)
    );
    $user_query = new WP_User_Query($args);

    if ( !empty($user_query->results) ) : 

        $post_title = get_the_title( $post_id ); 
        $post_url = get_permalink( $post_id ); 
        $subject = 'A post has been updated'; 
        $message = "A post has been updated on your website:\n\n";
        $message .= "<a href='". $post_url. "'>" .$post_title. "</a>\n\n"; 

        /** Send an individual message to each user */
        foreach ( $user_query->results as $user ) :
            wp_mail($user->data->user_email, $subject, $message);
        endforeach;
    endif; 
}
1
Matt H

Donc, fondamentalement, vous voulez une méthode ajax qui vérifie les modifications de publication.

Voici un excellent article sur WP ajax for front & back-end.

En bref, vous voulez faire ce qui suit:

  • Chargez le script Ajax JS sur les pages pour lesquelles vous souhaitez afficher la fenêtre de notification.
  • Créez un traitement côté serveur ajax wp, avec hook wp_ajax_{your_custom_action}. OR utilise l'API WP REST.
  • Vérifiez si une publication a été modifiée, etc., renvoie le résultat au script ajax js.
  • Si la réponse ajax est 'new_post' etc, affichez le popup.

Je n'utiliserais pas setinterval. Effectuez le premier appel ajax au chargement de la page. Si la réponse ajax est correcte, effectuez le prochain appel ajax après X secondes.

1
Bjorn