Allwissendes Karmameerschweinchen!
Hi. Ich möchte per eigenem jQuery Script einen Wert ermitteln und diesen im Footer meiner Seite anzeigen oder zwischenspeichern. Das Ganze soll für mein Wordpress Theme funktionieren.
Als Ergebnis möchte ich erreichen, dass ich in Wordpress eine Funktion device_size() habe, die ich irgendwo aufrufen kann und die mir als Rückgabewert den ermittelten Wert aus meinem jQuery Script anzeigt. Diesen möchte ich später als Thumbnail Argument nutzen.
Dazu muss ich in der functions.php mein Script einqueuen und einen wp_ajax_* Filter hooken. Habe ich gemacht. Allerdings habe ich nun 1 Fehler und ein Verständnisproblem.
Zuerst der Code:
functions.php
responsive_images.js
Im Footer mache ich erstmal einfach nur
Der Fehler:
im jQuery Script lande ich in der fail Funktion, wenn ich die Seite aufrufe.
Ändere ich den jQuery.post von jQuery.post(MyAjax.ajaxurl .... auf jQuery.post(MyAjax.ajax_url ... lande ich im success und mir wird die Response als Alert ausgegeben. Wieso???? In der functions.php steht in wp_localize_script doch auch array( 'ajaxurl' ...) und nicht array( 'ajax_url' ...)
zur Verständnisfrage:
Ich muss den Kram ja mit wp_ajax_nopriv_* hooken um den weiterverarbeiten zu können. Hier scheinen aber nie Daten zu landen. Ich kann die nicht abfangen, nicht per global $wpdb in die DB schreiben... die Post Variablen sind immer leer... wie komme ich nun an den Wert von device_size heran?
Ich hoffe mir kann wer helfen...
VG
Als Ergebnis möchte ich erreichen, dass ich in Wordpress eine Funktion device_size() habe, die ich irgendwo aufrufen kann und die mir als Rückgabewert den ermittelten Wert aus meinem jQuery Script anzeigt. Diesen möchte ich später als Thumbnail Argument nutzen.
Dazu muss ich in der functions.php mein Script einqueuen und einen wp_ajax_* Filter hooken. Habe ich gemacht. Allerdings habe ich nun 1 Fehler und ein Verständnisproblem.
Zuerst der Code:
functions.php
PHP:
/**
* Make use of jQuery and responsive_images Script
*/
add_action( 'wp_enqueue_scripts', 'dav2_enqueue_scripts' );
function dav2_enqueue_scripts(){
wp_enqueue_script('jquery');
wp_register_script( 'responsive_images', get_template_directory_uri() . '/js/responsive_images.js', array('jquery'), false, true );
wp_enqueue_script( 'responsive_images' );
wp_localize_script( 'responsive_images', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin_ajax.php' ) ) );
}
/**
* Check the device size
*/
add_action('wp_ajax_dav2_device_size', 'dav2_device_size');
add_action('wp_ajax_nopriv_dav2_device_size', 'dav2_device_size');
function dav2_device_size() {
if(isset($_POST['device_size'])) {
echo $_POST['device_size'];
} else {
echo "NIX";
}
exit;
}
responsive_images.js
PHP:
jQuery(document).ready(function($) {
var data = {
action: 'dav2_device_size',
device_size: function(){
if (window.matchMedia("all and (max-width: 480px)").matches) {
return "responsive_small";
}
else if (window.matchMedia("all and (min-width: 480px) and (max-width: 800px)").matches) {
return "responsive_medium";
} else {
return "responsive_large";
}
}
};
// We can also pass the url value separately from ajaxurl for front end AJAX implementations
jQuery.post(MyAjax.ajaxurl, data, function(response) {
alert(response);
})
.fail(function() {
alert( "error" );
});
});
Im Footer mache ich erstmal einfach nur
PHP:
<?php print_r($_POST, false); ?>
Der Fehler:
im jQuery Script lande ich in der fail Funktion, wenn ich die Seite aufrufe.
Ändere ich den jQuery.post von jQuery.post(MyAjax.ajaxurl .... auf jQuery.post(MyAjax.ajax_url ... lande ich im success und mir wird die Response als Alert ausgegeben. Wieso???? In der functions.php steht in wp_localize_script doch auch array( 'ajaxurl' ...) und nicht array( 'ajax_url' ...)
zur Verständnisfrage:
Ich muss den Kram ja mit wp_ajax_nopriv_* hooken um den weiterverarbeiten zu können. Hier scheinen aber nie Daten zu landen. Ich kann die nicht abfangen, nicht per global $wpdb in die DB schreiben... die Post Variablen sind immer leer... wie komme ich nun an den Wert von device_size heran?
Ich hoffe mir kann wer helfen...
VG