Încărcarea shortcode-ului cu ajax
Încerc să încarc un slideshow doar dacă browserul are o anumită dimensiune a ecranului - adică nu vreau ca slideshow-ul să se încarce pe ecrane mai mici, mobile. Plugin-ul de slideshow oferă un shortcode:
<?php echo do_shortcode('[metaslider id="8302"]'); ?>
Dar când încerc să-l încarc cu .load(), acesta doar afișează șirul de caractere și nu execută codul php.
Căutând prin site, am găsit câteva postări legate de acest subiect:
apelarea shortcode în javascript De ce s-ar putea ca 'do_shortcode' al unui plugin să nu funcționeze într-o cerere AJAX?
Din păcate, nu am suficientă reputație pentru a adăuga comentarii la acele postări, așa că deschid o nouă întrebare.
Mă întreb dacă cineva poate explica acest lucru într-un mod foarte simplificat pentru cineva care nu este familiarizat cu PHP?
Nu poți încărca un fișier direct în acest fel:
$('.homepage__slider').load('wp-content/themes/mytheme/slider.php');
De asemenea, reține că WordPress încarcă jQuery în modul noConflict, astfel aliasul $
nu funcționează.
Dacă încarci un fișier direct, niciuna dintre funcțiile WordPress nu va funcționa. Ar trebui să folosești API-ul AJAX pentru ca totul să se încarce în contextul WordPress.
Ai putea încapsula PHP-ul de procesare într-o funcție:
function my_ajax_shortcode_wpse_108874() {
echo do_shortcode('[metaslider id="8302"]');
die;
}
Conectează această funcție la sistemul AJAX:
add_action('wp_ajax_my_ajax_shortcode', 'my_ajax_shortcode_wpse_108874()');
add_action('wp_ajax_nopriv_my_ajax_shortcode', 'my_ajax_shortcode_wpse_108874()');
Trimite cererea ta către http://site/wp-admin/admin-ajax.php
și pasează my_ajax_shortcode
ca argument când JavaScript-ul face o cerere.
var data = {
action: 'my_ajax_shortcode'
};
jQuery.post(ajax_url, data, function(response) {
// orice ai nevoie să faci; poate nimic
});
Poți seta ajax_url
similar cu acest exemplu din Codex:
add_action( 'admin_enqueue_scripts', 'my_enqueue' );
function my_enqueue($hook) {
if( 'index.php' != $hook ) return; // Se aplică doar panoului de bord
wp_enqueue_script( 'ajax-script', plugins_url( '/js/my_query.js', __FILE__ ), array('jquery'));
// în javascript, proprietățile obiectului sunt accesate ca ajax_object.ajax_url, ajax_object.we_value
wp_localize_script( 'ajax-script', 'ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );
}

Mulțumesc pentru postarea detaliată. Sunt chiar destul de slab cu PHP și JavaScript, așa că, să fiu sincer, nu a prea avut sens pentru mine, chiar dacă explicația ta pare destul de amănunțită. Am reușit să o fac aproape să funcționeze - slideshow-ul se încarcă, dar are probleme. Ca și cum nu încarcă toate resursele necesare pentru a funcționa corect (imaginile nu au dimensiunea corectă, elementele care ar trebui să fie ascunse nu sunt, etc.). Am încercat să adaug manual JavaScript-ul și CSS-ul pluginului, dar fără succes.

Se pare că nu are legătură cu resursele - dacă încarc două versiuni ale slider-ului pe aceeași pagină, în acest fel și folosind shortcode-ul obișnuit pentru a mă asigura că toate resursele sunt încărcate, versiunea AJAX este totuși defectă.

Ca să fiu mai precis, versiunea AJAX afișează o grămadă de HTML în slide care nu apare în versiunea obișnuită cu shortcode. Acestea includ div-uri cu clasa thumbnail, delete slide, câmpuri de input pentru capturi, etc. - aproape ca și cum ar fi o versiune de administrare a slide-ului.
