【问题标题】:ajax call from a wordpress plugin to run on specific page来自 wordpress 插件的 ajax 调用以在特定页面上运行
【发布时间】:2017-04-16 00:57:30
【问题描述】:

我是 ajax 世界的新手,但我已成功按照说明进行操作 here:

我遇到的问题是我试图有条件地在特定页面上运行 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 = '<option></option>';
    foreach($results as $k => $v){
        $optionsString .= '<option value="' . $v['id'] . '">' . $v['name'] . '</option>';
    }

    //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 ) {
                //to see the immediate response from ajax - uncomment below
                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

                });
            }
        });

 });

任何建议都将不胜感激!

【问题讨论】:

标签: jquery ajax wordpress


【解决方案1】:

试试这个:

add_action('template_redirect', 'qp_tester');

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

【讨论】:

  • 我包含在表单中的过滤器并不是我想要完成的,尽管表单是我希望从 ajax 调用中填充选项的地方。问题是 post_love_add_love 函数。如果 ajax 操作不在条件中(例如 is_page),则效果很好 - 但如果我尝试将函数或操作添加到条件中,则 ajax 不起作用
  • 是否可以通过ajax调用传递页面ID?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 2014-12-16
相关资源
最近更新 更多