Modul corect de utilizare a funcțiilor WordPress cu un fișier PHP AJAX
Am următoarea funcție jQuery în fișierul meu custom-js.js
:
$(function() {
$(".product-vote-button-up").click(function(){
var productID = $(this).attr('productID');
var request = $.ajax({
url: "/wordpress/wp-content/themes/my-theme/js/ajax/vote-database-update.php",
type: "POST",
data: {id : productID},
});
request.done(function() {
$("#product-" + productID + " .item-product-footer-vote-container").html('Mulțumim pentru votul tău!');
});
request.fail(function(jqXHR, textStatus) {
alert( "Cererea a eșuat: " + textStatus );
});
});
});
Folosind AJAX, vreau să actualizez numărul de voturi din baza mea de date personalizată de produse folosind comenzi SQL. Pentru asta, am nevoie să accesez funcțiile WordPress în vote-database-update.php
, cum ar fi $wpdb
. Singura metodă care a funcționat până acum a fost adăugarea:
require_once( explode( "wp-content" , __FILE__ )[0] . "wp-load.php" );
în fișierul meu PHP. Totuși, cred că aceasta nu este cea mai bună soluție și după ce am citit documentația, cred că există o altă metodă folosind admin-ajax.php
. În majoritatea documentațiilor, este descris cum să adaugi AJAX într-un plugin cu admin-ajax.php
. Sunt puțin confuz deoarece fișierul meu vote-database-update.php
nu este exact un plugin (sau poate nu am definiția corectă a unui plugin WordPress). Care ar fi metoda corectă de a include funcțiile WordPress în fișierul meu vote-database-update.php?

Da, folosirea admin-ajax.php
este soluția potrivită aici. Pentru a o utiliza, ai putea face ceva de genul următor:
în vote_database_update.php
// conectare la admin-ajax
// textul de după 'wp_ajax_' și 'wp_ajax_no_priv_' în apelurile add_action()
// care urmează este ceea ce vei folosi ca valoare a data.action în apelul
// ajax din JS
// dacă apelul ajax va fi făcut din JS executat când utilizatorul este autentificat în WP,
// atunci folosește această versiune
add_action ('wp_ajax_call_your_function', 'your_function') ;
// dacă apelul ajax va fi făcut din JS executat când niciun utilizator nu este autentificat în WP,
// atunci folosește această versiune
add_action ('wp_ajax_nopriv_call_your_function', 'your_function') ;
function
your_function ()
{
if (!isset ($_REQUEST['id'])) {
// setează valoarea de return pe care o dorești în caz de eroare
// valoarea returnată poate fi de ORICE tip de date (de ex., array())
$return_value = 'mesajul tău de eroare' ;
wp_send_json_error ($return_value) ;
}
$id = intval ($_REQUEST['id']) ;
// efectuează procesarea dorită pe baza $id
// setează valoarea de return pe care o dorești în caz de succes
// valoarea returnată poate fi de ORICE tip de date (de ex., array())
$return_value = 'mesajul/datel tale de succes' ;
wp_send_json_success ($return_value) ;
}
în custom-js.js
(function ($) {
$('.product-vote-button-up').click (function () {
var productID = $(this).attr ('productID') ;
$.ajax ({
url: '/wp-admin/admin-ajax.php',
type: 'POST',
dataType: 'JSON',
data: {
// valoarea lui data.action este partea de DUPĂ 'wp_ajax_' în
// add_action ('wp_ajax_xxx', 'yyy') din PHP-ul de mai sus
action: 'call_your_function',
// ORICE alte proprietăți ale lui data sunt transmise către your_function()
// în variabila globală $_REQUEST (sau $_POST în acest caz) din PHP
id : productID
},
success: function (resp) {
if (resp.success) {
// dacă dorești să folosești valoarea returnată pe care ai setat-o
// în your_function(), o poți face prin
// resp.data, dar în acest caz presupun că nu
// ai nevoie de ea
$('#product-' + productID + ' .item-product-footer-vote-container').html ('Mulțumim pentru votul tău!') ;
}
else {
// acest caz "error" înseamnă că apelul ajax în sine a reușit, dar funcția
// apelată a returnat o condiție de eroare
alert ('Eroare: ' + resp.data) ;
}
},
error: function (xhr, ajaxOptions, thrownError) {
// acest caz de eroare înseamnă că apelul ajax în sine a eșuat, de ex., o eroare de sintaxă
// în your_function()
alert ('Cererea a eșuat: ' + thrownError.message) ;
},
}) ;
}) ;
})(jQuery) ;
Sper că acest lucru te ajută.
