Cum să obții conținutul unei postări folosind ajax?
Lucrez la un plugin. Am un tip de postare personalizată team
. Postarea personalizată are patru articole din categorii diferite. Am folosit acest cod pentru a trimite ID-ul fiecărei postări folosind ajax.
$(document).ready(function () {
$(".post_thumbnail").click(function () {
var id_post = $(this).attr('post_id');
$.ajax({
type: 'POST',
url: "<?php echo plugin_dir_url(__FILE__).'post-content.php';?>",
data: {
'post_id': id_post
}, success: function (result) {
alert(result);
},
error: function () {
alert("error");
}
});
});
});
Am reușit cu succes să trimit ID-ul și să îl primesc. Pentru a obține ID-ul, codul meu este:
if(isset($_POST['post_id'])) {
echo $id=$_POST['post_id'];
}
dar nu reușesc să afișez conținutul fiecărei postări. Cum pot afișa conținutul fiecărei postări? Am încercat tot ce am putut dar nu am reușit. Orice ajutor ar fi foarte apreciat.
În primul rând, ar trebui să folosești întotdeauna metodele AJAX din WordPress, nu o funcție personalizată pentru asta. Vezi AJAX în Plugin-uri în Codex.
Cu această practică în minte, poți configura cererea astfel. Schimbă URL-ul AJAX în
<?php echo admin_url('admin-ajax.php'); ?>
și adaugă cheia 'action':
cu valoarea numelui funcției specifice WordPress pe care vrei să fie executată în pasul următor, când partea de server primește datele tale.
$(".post_thumbnail").click(function () {
var id_post = $(this).attr('post_id');
$.ajax({
type: 'POST',
url: '<?php echo admin_url('admin-ajax.php'); ?>',
data: {
'post_id': id_post,
'action': 'f711_get_post_content' //acesta este numele metodei AJAX apelate în WordPress
}, success: function (result) {
alert(result);
},
error: function () {
alert("error");
}
});
});
Acum trebuie să-i spunem WordPress ce să facă atunci când cineva apelează f711_get_post_content
.
Înregistrează Acțiunea în AJAX-ul WordPress. Acest lucru se face în funcțiile Pluginului tău. Prima parte ('wp_ajax_') este pentru a-i spune WordPress că aceasta este o acțiune AJAX, iar partea de după aceea este numele acțiunii ('f711_get_post_content'). Al doilea argument este funcția pe care WordPress o execută când această acțiune este apelată.
add_action( 'wp_ajax_f711_get_post_content', 'f711_get_post_content_callback' );
// Dacă vrei ca și utilizatorii nelogati să poată folosi această funcție, înregistreaz-o din nou cu această funcție:
add_action( 'wp_ajax_nopriv_f711_get_post_content', 'f711_get_post_content_callback' );
După aceea creezi funcția ta de callback. Amintește-ți să ÎNTOTDEAUA die() funcțiile tale AJAX. Dacă funcția ta returnează JSON, ceea ce aș recomanda, poți încheia funcția folosind wp_send_json( $array );
, care are integrat die()
.
function f711_get_post_content_callback() {
// preia post_id și sanitizează-l pentru a îmbunătăți securitatea
$post_id = intval($_POST['post_id'] );
// Verifică dacă input-ul a fost un întreg valid
if ( $post_id == 0 ) {
echo "Input Invalid";
die();
}
// obține postarea
$thispost = get_post( $post_id );
// verifică dacă postarea există
if ( !is_object( $thispost ) ) {
echo 'Nu există nicio postare cu ID-ul ' . $post_id;
die();
}
echo $thispost->post_content; //Poate vrei să folosești wpautop( $thispost->post_content );
die();
}
Aceasta ar fi versiunea recomandată cu JSON. Îți permite să transmiți mai multe variabile înapoi către client.
function f711_get_post_content_callback() {
// preia post_id și sanitizează-l pentru a îmbunătăți securitatea
$post_id = intval($_POST['post_id'] );
// Verifică dacă input-ul a fost un întreg valid
if ( $post_id == 0 ) {
$response['error'] = 'true';
$response['result'] = 'Input Invalid';
} else {
// obține postarea
$thispost = get_post( $post_id );
// verifică dacă postarea există
if ( !is_object( $thispost ) ) {
$response['error'] = 'true';
$response['result'] = 'Nu există nicio postare cu ID-ul ' . $post_id;
} else {
$response['error'] = 'false';
$response['result'] = wpautop( $thispost->post_content );
}
}
wp_send_json( $response );
}

Pentru toți cei care găsesc acest răspuns: aruncați o privire la WordPress REST API, care este mult mai ușor de utilizat. Nu aveți nevoie de toate elementele PHP menționate în acest răspuns.
