Todavía estoy en el nivel de principiante de WordPress y PHP. Ya estoy investigando en stackoverflow, pero debido a mi bajo nivel de comprensión, no puedo encontrar la solución para el problema que tengo.
Uso WordPress como CMS para mi sitio web. Uso PHP echo para mostrar el valor de calificación promedio de un complemento de revisión de usuario. Se muestra bien. Pero después de que un visitante inserta su propia calificación y hace clic en el botón Enviar, el valor de calificación promedio no se actualiza hasta que se actualiza la página. ¿Cómo actualizar automáticamente el valor de calificación promedio después de hacer clic en el botón Enviar sin tener que actualizar la página?
<script type="text/javascript"> var userRating = <?php echo rmp_get_avg_rating( $postID ); ?> ; document.getElementById("div-rating").innerHTML = userRating; </script>Esta es la clase de botón de envío creada por el complemento para activar el envío del usuario.
rmp-rating-widget__submit-btn rmp-btn js-submit-rating-btn rmp-rating-widget__submit-btn--visibleEsta es la función de PHP que necesito hacer eco.
public function load_results() { if ( wp_doing_ajax() ) { // array with vote count, ratings and errors $data = array( 'voteCount' => false, 'avgRating' => false, 'errorMsg' => '', ); $post_id = intval( $_POST['postID'] ); $nonce = isset( $_POST['nonce'] ) ? $_POST['nonce'] : false; // security check if( ! $post_id ) { $data['errorMsg'] = esc_html__( 'You cannot rate a web page without an id!', 'rate-my-post' ); echo json_encode( $data ); die(); } $nonce_check = $this->has_valid_nonce( $nonce ); if( ! $nonce_check['valid'] ) { $data['errorMsg'] = $nonce_check['error']; echo json_encode( $data ); die(); } $vote_count = rmp_get_vote_count( $post_id ); $sum_of_ratings = rmp_get_sum_of_ratings( $post_id ); $average_rating = rmp_calculate_average_rating( $sum_of_ratings, $vote_count ); if ( $average_rating ) { // post has been rated $data['voteCount'] = $vote_count; $data['avgRating'] = $average_rating; } else { // no ratings so far $data['voteCount'] = 0; $data['avgRating'] = 0; } echo json_encode( $data ); }; die(); }Gracias por tu ayuda.
Sin actualizar la página web, puede tomar los datos en el servidor utilizando el objeto XMLHttpRequest en el lado del cliente. Puede encontrar muchas implementaciones (comoXMLHttpRequest , Fetch API ) que lo ayudan a comunicarse con el servidor desde el lado del cliente sin actualizar la página. Si desea utilizar una tecnología diferente ( Socket.io ), los sockets web pueden satisfacer sus necesidades en este problema.