カスタムテンプレート/テーマを使用してワードプレスサイトを開発していますが、トラブル。ユーザーがボタンをクリックしたときにAjaxを使用して関数を呼び出したい。 1つのページに、次のようなボタンがあります:

<p class="form-submit"> <input name="message_read" type="submit" class="submit button mark-as-read" value= "Mark as read" /> </p> 

そして、次のようなjQuery / Ajax関数があります:

jQuery(document).ready(function() { jQuery(".mark-as-read").click(function () { console.log("The function is hooked up"); jQuery.ajax({ type: "POST", url: "/wp-admin/admin-ajax.php", data: { action: "mark_message_as_read", }, success: function (output) { console.log(output); } }); }); }); 

上記の関数はwp-content/themes/my-theme/js/wp_ajax_calls.jsにあります。次のようにスクリプトをサイトに追加しました:

1)これをfunctions.phpファイルに追加しました:

wp_enqueue_script( "ajax calls", get_template_directory_uri() ."/js/wp_ajax_calls.js", array("jquery"), "1.0", true); 

2)ヘッダーにスクリプトを含めました。

<script type="text/javascript" src="https://mysite//wp-content/themes/twentyfifteen/js/wp_ajax_calls.js"></script> 

ボタンをそのままクリックすると、console.logステートメントが表示されます。私の理解では、ajax関数で$ wpdbを使用できるphp関数を呼び出したいと思います。これはfunctions.phpにあります:

function mark_message_as_read() { global $wpdb; // do stuff. } 

これは私が混乱しているところです。主な質問が2つあります。

1)どこかにadd_action()があるはずなのに、どこに行けばいいのかわからないそれらを置くと、どのフックを使用すべきかわかりません。

2)さらに、 dbクエリのphp関数にデータ(メッセージID)を渡せるようにしたいのですが、その関数に引数を渡すにはどうすればよいですか?

メッセージの設定方法のため、if( isset($_POST["message_whatever"]) ) twentyfifteen_message_whatever();のようなものは使いたくありません。

必要に応じて詳細情報を提供してください。よろしくお願いします!!

コメント

回答

  1. 子テーマを作成して、混乱しないようにします。次回テーマを更新するときに、すべての変更が失われる可能性があるため、既存のテーマのコード(子テーマを参照)

  2. ajaxリクエストに値を渡す方法は次のとおりです。

    jQuery(document).ready(function() { jQuery(".mark-as-read").click(function () { console.log("The function is hooked up"); jQuery.ajax({ type: "POST", url: "/wp-admin/admin-ajax.php", data: { action: "mark_message_as_read", // add your parameters here message_id: $(".your-selector").val() }, success: function (output) { console.log(output); } }); }); }); 

調査を行うことができますノンスでも、アプリにセキュリティレイヤーを追加するには: https://codex.wordpress.org/WordPress_Nonces

  1. 最後に、リクエストを処理するためのPHPコード(ここでも、実際のコードでナンスを処理する必要があります):

    // register the ajax action for authenticated users add_action("wp_ajax_mark_message_as_read", "mark_message_as_read"); // register the ajax action for unauthenticated users add_action("wp_ajax_nopriv_mark_message_as_read", "mark_message_as_read"); // handle the ajax request function mark_message_as_read() { $message_id = $_REQUEST["message_id"]; // add your logic here... // in the end, returns success json data wp_send_json_success([/* some data here */]); // or, on error, return error json data wp_send_json_error([/* some data here */]); } 

コメント

  • ありがとうございます! '間違いなくノンスも見ていきます。 :D

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です