[WordPress] ワードプレスのプラグイン内のボタンのクリックに AJAX 関数を呼び出す

スポンサーリンク

Question

私は AJAX を使用してワードプレスのプラグインで php 関数からデータを取得しようとしています。これらのフックは私に完全に混乱を追加する必要. https://codex.wordpress.org/AJAX_in_Plugins からの例と遊んでいるし、少しボタンにいくつかのデータをクリックして警告にそれを変更します。

私のプラグインで:

    function my_enqueue($hook) {
                /**if( 'index.php' != $hook ) {
                // Only applies to dashboard panel
                return;
                }*/


                wp_enqueue_script( 'ajax-script', plugins_url( 'js/formAdd_.js', __FILE__ ), array('jquery') );

                // in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
            wp_localize_script( 'ajax-script', 'ajax_object',
                    array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ); );
            }
            add_action( 'wp_enqueue_scripts', 'my_enqueue' );

            // Same handler function...
            add_action( 'wp_ajax_my_action', 'my_action_callback' );
            add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
            function my_action_callback() {
                global $wpdb;

                $names = array();
                            while ( bp_group_members() ) : bp_group_the_member();


                                array_push($names, bp_group_member_name() );

                            endwhile;
                    echo json_encode($names);
                die();
            }

と私の js ファイル:

jQuery(document).ready(function($) {

//ajax example
jQuery('.ajaxTrigger').live('click',function(){  
var data = {
        'action': 'my_action',
        'whatever': ajax_object.we_value      // We pass php values differently!
    };
    // We can also pass the url value separately from ajaxurl for front end AJAX implementations
    jQuery.post(ajax_object.ajax_url, function(response) {
        alert(response[0]);
    });
});

とどこかで私のプラグイン ボタン:


何がうまくいかないが、技術的に簡単なボタンをクリックして関数を呼び出すことができる必要がありますまたは php の関数は最初にトリガーになっているかと確信するのではないか?

また、エラー コンソールでは言うポスト wp-管理者/管理者-ajax.php 500 (内部サーバー エラー)

更新:

JavaScript と警告からいくつかの不要なコードがあるしかしそれただ警告 0、従ってそれは意味を削除された while ループの php 関数に制御が返されないと思う適切な配列

jQuery('.ajaxTrigger').live('click',function(){  

    // We can also pass the url value separately from ajaxurl for front end AJAX implementations
    jQuery.post(ajax_object.ajax_url, function(response) {
        alert(response[0]);
    });
});

全体プラグインの php コード

function my_plugin_init() {
    require_once( dirname( __FILE__ ) . '/getGroupExt.php' );

/* If you have code that does not need BuddyPress to run, then add it here. */

if ( !defined( 'ABSPATH' ) ) exit;

                wp_enqueue_script( 'ajax-script', plugins_url( 'js/formAdd_.js', __FILE__ ), array('jquery') );

                // in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
                wp_localize_script( 'ajax-script', 'ajax_object',
                        array( 'ajax_url' => admin_url( 'admin-ajax.php' )) );
            }
            add_action( 'wp_enqueue_scripts', 'my_enqueue' );

            // Same handler function...
            add_action( 'wp_ajax_my_action', 'my_action_callback' );
            add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
            function my_enqueue($hook) {
                /**if( 'index.php' != $hook ) {
                // Only applies to dashboard panel
                return;
                }*/
                        function my_action_callback() {
                global $wpdb;

                $names = array();
                if ( bp_group_has_members( 'group_id='.bp_get_group_id().'&exclude_admins_mods=false' ) ) : 

                while ( bp_group_members() ) : bp_group_the_member();


                             //$name = bp_get_group_member_name();             
                                $name = bp_group_member_name() ;

                                array_push($names, $name);

                            endwhile;
                    echo json_encode($names);
                die();
                endif;
            }

/**
 * The class_exists() check is recommended, to prevent problems during upgrade
 * or when the Groups component is disabled
 */
if ( class_exists( 'BP_Group_Extension' ) ) :

class Group_Extension_Example_1 extends BP_Group_Extension {
    /**
     * Your __construct() method will contain configuration options for 
     * your extension, and will pass them to parent::init()
     */
    function __construct() {
        $args = array(
            'slug' => 'group-extension-example-1',
            'name' => 'Group Extension Example 1',
        );
        parent::init( $args );
    }

 //from ajax example



    /**
     * display() contains the markup that will be displayed on the main 
     * plugin tab
     */
    function display() {
        //if admin
        $user_id=get_current_user_id();
        $group_id = bp_get_group_id();
        if (groups_is_user_admin( $user_id, $group_id )) {
            echo 'There are no tasks! - Set your tasks for this group';
            ?>
            

you're not part of any groups.


Save your plugin setting here:

事前のおかげで.

答え

ajax_object.we_value

を使用する場合は、

wp_localize_script()

でその変数を作成する必要があるでしょう:

add_action( 'wp_enqueue_scripts', 'my_enqueue' );
function my_enqueue()
{
    wp_enqueue_script( 'ajax-script', plugins_url( 'js/formAdd_.js', __FILE__ ), array( 'jquery' ) );

    wp_localize_script( 'ajax-script', 'ajax_object', array(
        'ajax_url' => admin_url( 'admin-ajax.php' ),
        'we_value' => 'test'
    ) );
}

の JS で

ajax_object.we_value

を使用し

whatever

として

admin-ajax.php

にそれを投稿

jQuery(document).ready(function($) {
    $('body').on('click', '.ajaxTrigger', function(){
        $.ajax({
            type: 'POST'
            ,dataType: 'json'
            ,url: ajax_object.ajax_url
            ,data: {
                'action': 'my_action',
                'whatever': ajax_object.we_value
            }
            ,success: function(response) {
                alert(response);
            }
        });
    });
});

、AJAX コールバックでキャッチし

whatever

値を使用して戻るの応答を送信:

add_action( 'wp_ajax_my_action',        'my_action_callback' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
function my_action_callback()
{
    $names = array( $_POST['whatever'] . ' successful!' );

    echo json_encode( $names );

    exit;
}

http://stackoverflow.com/questions/27321516/calling-ajax-function-on-button-click-within-wordpress-plugin

スポンサーリンク

Leave a Reply