如何使用SHORTINIT声明AJAX函数

时间:2014-12-22 作者:Marcos

我尝试使用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 我没有任何价值。

Edit:

现在我有了一个新问题:告诉我错误:

致命错误:对非对象调用成员函数main()。。。第873行

我在寻找解决方案,但每个人都说这个错误是因为不包括wp-load.php 但我已经包括了这个文件。。。。

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

构建处理ajax请求的PHP脚本,并将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。它位于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_successwp_send_json_error. 需要以下模块:

加载。php:始终需要加载WordPress格式。php:它包含用于upadate_post_meta

  • 元。php:它包含与post元数据和自定义字段相关的函数。php和修订版。php:这些模块包含更新post数据时所需的post相关函数

    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);
    
    以及排队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);
    
    
    
    }
    

  • 结束

    相关推荐

    AJAX重置我的全局变量

    我想知道为什么我不能读取$\\u测试的更新值。似乎每次Ajax调用都会重置$\\u测试。// functions.php $_TEST = 0; // the variable I want to update with each Ajax call if ( is_admin() ) { add_action( \'wp_ajax_get_global_val\', \'get_global_val\'); add_action( \'wp_ajax_nopriv_ge