Intereting Posts

Как объявить Ajax функции ussing SHORTINIT

Я пытаюсь использовать SHORTINIT в своем WordPress, чтобы сделать Ajax быстрее, но я пытаюсь объявить свои функции и не возвращать никакого значения.

Мой код:

define('SHORTINIT',true); require_once ('../../../../wp-load.php'); require_once ('../../../../wp-config.php'); function muestraMensaje_callback(){ echo "hola que tal"; die(); } add_action('wp_ajax_muestraMensaje', 'muestraMensaje_callback'); add_action('wp_ajax_nopriv_muestraMensaje', 'muestraMensaje_callback'); 

И в моих функциях у меня есть этот код:

 /* * Ajaxs function */ add_action('init','registraAjax'); function registraAjax(){ wp_register_script('miScript', get_bloginfo('stylesheet_directory').'/js/ajax.js'); //$miUrl=array('url'=>admin_url('admin-ajax.php')); $miUrl=array('url'=>get_bloginfo('stylesheet_directory').'/myAjax/ajax.php'); wp_localize_script(miScript, 'MyAjax', $miUrl); wp_enqueue_script('miScript',get_bloginfo('stylessheet_directory').'/js/ajax.js'); } 

В чем проблема? Если бы я позвонил в «muestraMensaje», у меня не было никакой ценности.

Редактировать:

Теперь у меня есть новая проблема: дайте мне ошибку:

 Fatal error: Call to a member function main() on a non-object...line 873 

Я ищу решение, но все сказали, что эта ошибка не включает wp-load.php, но я включил этот файл ….

Создайте PHP-скрипт, который будет обрабатывать ajax resquest и отправит запрос ajax прямо к этому файлу (а не к wp-admin / admin-ajax.php). В этом файле сначала определите SHORTINIT , затем загрузите WordPress вручную и, наконец, обработайте запрос ajax.

 define('SHORTINIT',true); //IMPORTANT: Change with the correct path to wp-load.php in your installation require_once ('../../../../wp-load.php'); //Load any WordPress module you may need from the include folder //For exmaple: //require( ABSPATH . WPINC . '/meta.php' ); //require( ABSPATH . WPINC . '/post.php' ); muestraMensaje(); function muestraMensaje(){ echo "hola que tal"; die(); } 

Предположим, вы назвали этот файл ajax.php и что он находится в URL-адресе mysite.com/wp-content/plugins/a-plugin/ajax.php. В javascript должно быть что-то вроде:

 $.ajax({ url: "http://mysite.com/wp-content/plugins/a-plugin/ajax.php", }) .done(function( data ) { alert(data); }); 

В следующем примере я использую эти функции WordPress: upadate_post_meta , get_post_custom , wp_send_json_success и wp_send_json_error . Эти модули необходимы:

  • load.php: всегда необходимо загрузить WordPress
  • formatting.php: он содержит дезинфицирующие функции, используемые upadate_post_meta
  • meta.php: он содержит функции, связанные с метаданными и настраиваемыми полями post
  • post.php и revision.php: эти модули содержат связанные с сообщением функции, необходимые при обновлении почтовых данных.

Итак, это скрипт PHP:

 define('SHORTINIT', true); //IMPORTANT: Change with the correct path to wp-load.php in your installation require( '../../../wp-load.php' ); require( ABSPATH . WPINC . '/formatting.php' ); require( ABSPATH . WPINC . '/meta.php' ); require( ABSPATH . WPINC . '/post.php' ); require( ABSPATH . WPINC . '/revision.php' ); cyb_uptdate_hits(); function cyb_uptdate_hits(){ if( isset($_GET['postID']) ) { $post_id = intval( $_GET['postID']); if( $post_id > 0 ) { $get_meta = get_post_custom($post_id); if( isset($get_meta['hits'][0]) ) { $prev = intval($get_meta['hits'][0]); } else { $prev = 0; } update_post_meta($post_id, 'hits', $prev + 1); $res = array('postID' => $post_id, 'hits' => $prev + 1); wp_send_json_success($res); } else { wp_send_json_error('No post to update.'); } } else { wp_send_json_error('No post to update.'); } die('You die!'); } 

Это javascript, который я использую:

 (function($){ $(document).ready(function(){ //Update post hits counter if( typeof cyb_hits_data.postID !== 'undefined' && cyb_hits_data.postID != "0") { var update_hits = function(post_id){ $.getJSON(cyb_hits_data.ajax_url,{ postID : post_id }); } update_hits(cyb_hits_data.postID); } }); })(jQuery); 

И enqueue javascript:

 add_action( 'wp_enqueue_scripts', 'cyb_hits_enqueue_scripts' ); function cyb_hits_enqueue_scripts() { wp_register_script('cyb-hits', plugins_url( '/js/hits.js', __FILE__ ), array( 'jquery' ) ); wp_enqueue_script('jquery'); wp_enqueue_script('cyb-hits'); $theID = 0; if(is_single()) { $theID = get_the_ID(); } $scriptData = array( 'ajax_url' => plugins_url( '/ajax_hits.php', __FILE__ ), 'postID' => $theID ); wp_localize_script('cyb-hits','cyb_hits_data',$scriptData); }