私はチェックボックスでフィルタをAjaxで作りたいです。
これがチェックボックス付きのフォームです。
<form method="post" id="filter">
<input type="checkbox" name="f" value="1" onchange="this.form.submit()" <?php if ($face =='1') {echo 'checked';}?>
<input type="checkbox" name="t" value="1" onchange="this.form.submit()" <?php if ($Twitter=='1') {echo 'checked';}?>
<input type="hidden" value="myfilter">
</form>
これがjavascriptです。
jQuery(document).ready( function(){
jQuery('#content').on('submit', '#filter', function(e) {
e.preventDefault();
var test = jQuery('#test-btn').data( 'id' );
jQuery.ajax({
url : rml_obj.ajax_url,
type : 'post',
data : {
action : 'test_function',
security : rml_obj.check_nonce,
test_data : test
},
success : function( response ) {
alert (test);
jQuery('#result').html(response);
}
});
});
});
そして機能:
function test_function() {
check_ajax_referer( 'rml-nonce', 'security' );
$test_data = $_POST['test_data'];
echo $test_data;
die();
}
add_action('wp_ajax_test_function', 'test_function');
add_action('wp_ajax_nopriv_test_function', 'test_function');
今のところ私はただそれをテストしようとしています。そのため、ユーザーがチェックボックスをクリックしたときにajaxが呼び出されます。しかし、私は立ち往生しています。この行をフォームアクションaction="<?php echo site_url() ?>/wp-admin/admin-ajax.php"
に追加すると、送信時にajax url:admin-ajax.phpに行き詰まります。フォームからaction
行を削除すると、ページの単純なリロードが行われます。
誰かが私が何をしているのか私に言うことができるならば、私はこれを構築して、実際にフォームからチェックボックス値を送り、データをフィルタするための機能でクエリを実行します。
あなたのHTMLフォームに<input name="action" type="hidden" value="test_function"/>
を追加してください。ここで "value"はあなたの "action_name"です。あなたのAjax呼び出しは正直ではありません。データはurl: "your php action script" data: $('form#filter).serialize(),
であるべきですajaxについてまず最初にワードプレスなしであなたのコンピュータ上でajaxを作成しようとします。 AjaxがWordpressでどのように機能するかを理解したら。同じページに留まりたい場合はjQuery(document).ready(function($) { $('form#filter').on("submit",function(e){ e.preventDefault(); $.ajax({ .....
を使いましょう。初心者はajaxが何であるか理解できません。それはサーバーの応答です。そのため、まずサーバーサイドスクリプト(phpを使用)をその場所にURLで記述し、次にデータをそのURLファイルに送信する必要があります。それから実行され、サーバーは応答します。
/ update /正しいwordpressのajax axampleを提供し、それがどのように機能するかを説明します。
html
<form method="post" id="filter">
<input type="checkbox" name="f" value="1" onchange="this.form.submit()" <?php if ($face =='1') {echo 'checked';}?>
<input type="checkbox" name="t" value="1" onchange="this.form.submit()" <?php if ($Twitter=='1') {echo 'checked';}?>
<input type="hidden" name="action" value="my_php_action">
これは重要な<input type="hidden" name="action" value="my_php_action">
で、それ以外には作業が必要です。
ジャバスクリプト
jQuery(document).ready( function(){
$('#filter').on('submit', function(e) {
e.preventDefault();
jQuery.ajax({
/*here url is in your plugin directory created file to which you sent data*/
url : myPlugin/serverSidePHPscript.php,
type : 'post',
/* data : {
action : 'test_function',
security : rml_obj.check_nonce,
test_data : test
}, incorrect. Should be folowing*/
data:$('form#filter').serialize(), //server will unserialize automatic
success : function( response ) {
alert ('Server say :' + response ); //!important for url debuging purpose
}
});
});
});
myPlugin/serverSidePHPscript.phpファイルは、バリエーション1のようになっています。
<?php
echo "I fooled you!";
?>
理解しておくことが重要です:もしJavaScriptアラートボックスに "Server say:"としか表示されなければスクリプトは失敗しています。警告ボックスに「Server say:だまされました」と表示されている場合はそれが正しいです。
myPlugin/serverSidePHPscript.phpファイルは、バリエーション2のようになっています。
<?php
/**
* Executing Ajax process.
*
* @since 2.1.0
*/
define( 'DOING_AJAX', true );
if ( ! defined( 'WP_ADMIN' ) ) {
define( 'WP_ADMIN', true );
}
/** Load WordPress Bootstrap */
require_once('../../../../wp-load.php' );
/** Allow for cross-domain requests (from the front end). */
//send_Origin_headers();
// Require an action parameter here is for debuging
if ( empty( $_REQUEST['action'] ) )
wp_die( '0', 400 );
/** Load Ajax Handlers for WordPress Core */
require_once( ABSPATH . 'wp-admin/includes/ajax-actions.php' );
@header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
@header( 'X-Robots-Tag: noindex' );
send_nosniff_header();
nocache_headers();
add_action('I_fooled_you_again_wp_ajax', 'callback_function');
do_action( 'I_fooled_you_again_wp_ajax');
//callback function
function callback_function(){
echo "I fooled you again!";
}
wp_die();
?>
警告ボックスに「サーバーが言っている:私はまたまたあなたをだました!」と表示されたらそれからスクリプトは正しいです。 WordPressのファイルadmin-ajax.phpとmyPlugin/serverSidePHPscript.phpを比較すると、ほぼ同じです。
/ * update * /そして3番目の方法が最も簡単です。プラグインでは、wp_ajax_callback_fuctionまたはwp_ajax_nopriv_callback_functionフックを代わりに使用しないでください。フロントエンドにもadmin_initフックを使用してください。 admin-ajax.phpファイルにif条件があるため、wp_ajaxフックは起動しません。
これがAjaxがWordPressでどのように機能するかです。