私はfunctions.php
にこの機能を持っています
function get_blueprints_for_building () {
$args = array( 'post_type' => 'portfolio');
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
echo get_the_ID();
endwhile;
exit();
}
この関数はAJAXから次のように呼び出せるようにフックされています。
add_action('wp_ajax_blueprints_for_building', 'get_blueprints_for_building');
add_action('wp_ajax_nopriv_blueprints_for_building', 'get_blueprints_for_building');
私が抱えている問題は、私が特定のページにいるとき、そしてこの関数が実行されているときはいつでも、現在のページのIDが必要ですが、関数は現在の特定のページだけではなくpost_type => portfolio
に一致するすべてのページを返しますで。
問題は、WP_Query
を使用してその1つだけのidを取得する方法です。
私はページにいます、例としてそれをportfolio-1
と呼びましょう。
Portfolio-1ページがロードされるとすぐに、私はAJAXを実行しています。これは上記のphp関数を呼び出します。
データベース内の他のテーブルには、このページに関連するものがあり、ページIDで接続されているので、現在のページのID(ポートフォリオ-1)を取得したいと思います。現在のページのIDを取得しようとしているだけなので、これまでのところ、そのデータベースクエリは関数に含まれていません。 IDが提供されている場合は、このIDをパラメータとして他の関数を呼び出すだけです。
get_the_other_stuff($currentPageId)
しかし、それが今のところ問題ではありません。 :)
AJAXは検索エンジンでもどこからでも呼び出せるので、IDを手動で渡す必要があります。これを行うには、現在のページのIDをテンプレートのどこかに含める必要があります。
隠されたinput
要素に追加の情報を含めるのが一般的なやり方です。この隠し要素をテンプレートファイルに追加することができます。
<input id="my-post-id" type="hidden" value="<?php echo get_the_ID();?>">
これで、AJAX呼び出しで投稿のIDを取得できます。
var theID;
theID = jQuery("#my-post-id").val();
このように、あなたはあなたの呼び出しにこの値を含めることができます:
function customFunction() {
var theID;
theID = jQuery("#my-post-id").val();
jQuery.ajax({
type: 'GET',
url: 'AJAX URL HERE',
data: { postid: theID },
// The rest of the AJAX here
}
};
これで、IDがAdmin-AJAXに設定されているかどうかを確認できます。
function get_blueprints_for_building () {
// Stop execution if the function is called from out of the page
if (!isset($_GET['postid'])) exit('Please set a post ID!');
$id = $_GET['postid'];
// Now we have the ID!
}
そこに行きます。
Admin-AJAXの代わりにREST APIを使用することをお勧めします。セットアップは簡単で早いです。私の答えを見てください ここ 。
隠し入力を作成する代わりに、wp_localize_script
を使用してIDをスクリプトに渡すこともできます。ただし、エンキューされたスクリプトが必要です。
wp_localize_script(
'my-js', // The ID of your enqueued JS file
'my_localized_js', // The prefix for object
$my_localized_array // The array that contains your data
);
これで、現在のページのIDを配列に設定できます。
$my_localized_array = array(
'postID' => get_the_ID,
);
これを実行した後は、これを使用してJSファイル内の自分のIDにアクセスできます。
var id = my_localized_js.postID;
これは後でAJAX呼び出しで使用できます。