从WordPress插件中发出的ajax调用,在特定页面上运行。

10 浏览
0 Comments

从WordPress插件中发出的ajax调用,在特定页面上运行。

我对ajax世界还很陌生,但我已经成功地按照这里的指示进行操作:

我遇到的问题是,我试图有条件地在特定页面上运行ajax。这是为了避免代码在不适用的页面上不必要地运行。我尝试了多种方法,包括使用wordpress的is_page()函数。我尝试添加一个筛选器到the_content(),然后添加运行ajax的操作(尽管这不像是良好的编码)。但这些都不起作用。

我应该补充一下,我运行的ajax调用代码查询一个mysql数据库,返回数据,并将其添加到下拉菜单的选项中(这是我不希望每次都运行的部分)。在无条件运行时非常好用。当尝试添加页面条件时,它不起作用。以下是代码:

add_action( 'wp_enqueue_scripts', 'ajax_test_enqueue_scripts' );
function ajax_test_enqueue_scripts() {
    wp_enqueue_script( 'orgs', plugins_url( '/love.js', __FILE__ ), array('jquery'), '1.0', true );
    wp_enqueue_script( 'love', plugins_url( '/chosen.jquery.min.js', __FILE__ ), array('jquery'));
    wp_localize_script( 'love', 'postlove', 
        array(
        'ajax_url' => admin_url( 'admin-ajax.php' ),
        )
    );
}
function post_love_add_love() {
    global $wpdb; 
    $query = "SELECT id,name FROM wp_qp_orgs";
    $results = $wpdb->get_results($query,ARRAY_A);
    $optionsString = '';
    foreach($results as $k => $v){
        $optionsString .= '';
    }
    //https://stackoverflow.com/questions/14348470/is-ajax-in-wordpress
    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { 
        echo $optionsString;
        die();
    }
}
function qp_tester(){
    if(is_page()){
        echo do_shortcode('[formidable id=36]');
    }
}
add_filter('the_content','qp_tester');
add_action( 'wp_ajax_nopriv_post_love_add_love', 'post_love_add_love' );
add_action( 'wp_ajax_post_love_add_love', 'post_love_add_love' );

这是jquery代码:

 jQuery( document ).ready(function() {
        jQuery.ajax({
            url : postlove.ajax_url,
            type : 'post',
            data : {
                action : 'post_love_add_love',
            },
            beforeSend: function() {
                jQuery('#qpForm').delay(700).show(100);
            },
            success : function( response ) {
                //为了查看ajax的即时响应-取消注释下面的内容
                alert(response);
                jQuery('#field_iv2eu').html(response);
                jQuery('#field_iv2eu').chosen({
                    disable_search_threshold: 5,
                    no_results_text: "No results using",
                    placeholder_text_multiple: "Choose your organization",
                    search_contains: true,
                    max_shown_results: 8
                });
            }
        });
 });

非常感谢任何建议!

0
0 Comments

问题的原因:在WordPress插件中使用ajax调用特定页面时出现问题。问题是post_love_add_love函数。如果将ajax操作放在条件语句(如is_page)中,ajax就无法工作。

解决方法:尝试使用下面的代码:

add_action('template_redirect', 'qp_tester');
function qp_tester() {
    if(is_page()){
        echo do_shortcode('[formidable id=36]');
    }
}

在条件语句中添加函数或操作时,ajax无法正常工作。是否可能通过ajax调用传递页面ID?

0