web-dev-qa-db-ja.com

wP_Queryメソッドで現在のカスタム投稿IDを取得

私は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)

しかし、それが今のところ問題ではありません。 :)

1
Richard Zilahi

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 AP​​Iを使用することをお勧めします。セットアップは簡単で早いです。私の答えを見てください ここ

更新

隠し入力を作成する代わりに、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呼び出しで使用できます。

1
Jack Johansson