Úvodní stránka › Fórum podpory WordPressu › Pluginy (funkčnost webu) › Ajax ve WP
Štítky: admin_enqueue_scripts, ajax, js, wp_enqueue_scripts
Zvolené téma obsahuje celkem 6 odpovědí. Do diskuze (3 účastníci) se naposledy zapojil uživatel sjiamnocna a poslední změna je stará 8 let, 4 měsíce.
-
AutorPříspěvky
-
22. listopadu 2015 (11:51) #25494
Zdravím,
řeším problém, že potřebuji dostat javascriptovou proměnnou do php. Ajaxový přenos se mi nějak nedaří – vyzkoušel jsem příklad z kodexu a na mých stránkách nefunguje. Můžete mi někdo poradit, kde dělám chybu? Mě už z toho šibe.
PHP kód:
add_action( 'wp_enqueue_scripts', 'my_enqueue' ); function my_enqueue($hook) { if( 'index.php' != $hook ) { // Only applies to dashboard panel return; } wp_enqueue_script( 'ajax-script', plugins_url( '/js/my_query.js', __FILE__ ), array('jquery') ); // in JavaScript, object properties are accessed as 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 ) ); } // Same handler function... add_action( 'wp_ajax_my_action', 'my_action_callback' ); add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' ); function my_action_callback() { global $wpdb; $whatever = intval( $_POST['whatever'] ); //$whatever += 10; return $whatever; wp_die(); } if ( is_admin() ) { add_action( 'wp_ajax_my_frontend_action', 'my_frontend_action_callback' ); add_action( 'wp_ajax_nopriv_my_frontend_action', 'my_frontend_action_callback' ); add_action( 'wp_ajax_my_backend_action', 'my_backend_action_callback' ); // Add other back-end action hooks here } else { // Add non-Ajax front-end action hooks here } // shortcode pro zobrazeni na strance add_shortcode( 'ajax-zkouska', 'my_action_callback' );
JS script:
jQuery(document).ready(function($) { var data = { 'action': 'my_action', 'whatever': ajax_object.we_value // We pass php values differently! }; // We can also pass the url value separately from ajaxurl for front end AJAX implementations jQuery.post(ajax_object.ajax_url, data, function(response) { alert('Got this from the server: ' + response); }); });
(v podstatě je opsaný WP codex příklad)
A živý příklad jak mi to nefunguje je zde – LINK
Předem díky za pomoc.
25. listopadu 2015 (16:56) #25532AJAX_OBJECT
mi nikdy nefungoval, já úspěšně používám toto:$.post(ajaxurl, data, function(response) { jQuery('#xmlformat').html(response); });
Snad ti to pomůže :)
26. listopadu 2015 (15:29) #25543Dik za nasměrování – nějaky prostý příklad nemáš? Moc to neumím implementovat.
26. listopadu 2015 (20:16) #25547Načtu skript:
wp_register_script('wpxml_script_ajaxxmlcont',$this->pluginfo['basefolder'].'/src/scripts/ajax_xmlcont.js',array('wpxml_script_jsfunctions'));
Skript pro získání dat (používám JQuery, které se mi automaticky načítá díky zadání závislosti na jednom předešlém skriptu, který ji má “wpxml_script_jsfunctions”) – jde o načtení dat z XML souboru do formuláře:
jQuery(document).ready(function($) { jQuery('#loadfile').click(function(){ var data = { 'action': 'wpxml_files', 'plnamexmlbone_filename': jQuery('#selectfile').val() }; var title=jQuery(this).prev('.title').html(); var id=jQuery(this).attr('id'); $.post(ajaxurl, data, function(response) { jQuery('#xmlformat').html(response); }); }); jQuery('#postcount').on('change',function(){ if (jQuery(this).val()<1 || jQuery(this).val()>499)alert(); }); });
A nakonec akce AJAXu ve WP:
class wpxml_ajax{ public function wpxml_ajax(){ $this->wpxml=new wpxml_feeder(); $this->pluginfo=&$this->wpxml->pluginfo; add_action('wp_ajax_wpxml_files',array($this,'getfcont_xmlbones')); } public function getfcont_xmlbones(){ $ffile=(file_exists($_POST['plnamexmlbone_filename']))?$_POST['plnamexmlbone_filename']:false; if($ffile) echo file_get_contents($ffile); else _e('Sorry, no such file was found. Maybe you\'ll have to use your own ideas to create own structure. I\'m sorry.',$this->pluginfo['langdomain']); die(); } } $wpxml_ajax=new wpxml_ajax();
Toto mi fungovalo, ale tento plugin už jsem asi zavrhl, protože sice byl asi tak 4x komplexnější, než ostatní pluginy tohoto typu dohromady (XML feed pro heureku ap.) ,ale myslím, že už jich je na trhu dost, aby si každý vybral podle chuti a já se radši budu věnovat svým unikátním pluginům (těžko věřit, ale opravdu jsou jediné – zatím) ;)
26. listopadu 2015 (20:21) #25548Ještě upozorním, že tím, že jsem tento plugin zavrhl, jsem se k němu už nevrátil, takže ani nezaznamenal konstruktory třídy pro PHP7 – tedy místo
class cname{ public function cname(){//...} }
musíš (nebo pro kompatibilitu “měl bys” ;) ) použít
class cname{ public function __construct(){//...} }
26. listopadu 2015 (23:11) #25553@ada: Zmiňovaný příklad nemůže fungovat, protože se na stránce vůbec nenačte Javascript. Podle uvedeného kódu by se tam měl načítat soubor
my_query.js
, ale nic podobného tam nevidím?A nechápu celou úvodní podmínku:
if( 'index.php' != $hook ) { // Only applies to dashboard panel return; }
K čemu to má být dobré? Omezujete použití skriptu pouze na Nástěnku? Potom ale musíte použít admin_enqueue_scripts pro administraci a nikoli wp_enqueue_scripts?
27. listopadu 2015 (6:29) #25554Jo, to by mohlo být… Díval jsem se na to z mobilu a PHP jsem nějak přeskočil
Ještě dodám tak zpětně, že v tom mém příkladu (který snad funguje? možná) načítám skript do administrační části. Pro načtení do frontendu je potřeba místo
admin_enqueue_scripts
použítwp_enqueue_scripts
V podstatě metoda pokus – omyl není špatná, ale je dobré si o omylech něco přečíst :D
Já to neudělal a dodnes tápu :)___________
Pardon, po ránu mi to nějak nevychází :D
Všechno už napsal admin, jen jsem skončil u posledního bloku kódu -
AutorPříspěvky
Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.