通过WP_Query方法获取当前自定义帖子ID

时间:2017-07-04 作者:Richard Zilahi

我在我的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?

更新-我在这里想要实现什么

我在一页上,让我们称之为portfolio-1 例如。

只要加载了portfolio-1页面,我就会执行一个AJAX,它调用上面提到的php函数。

我想获取当前页面(portfolio-1)的ID,因为在数据库中的另一个表上,有与此页面相关的内容,通过页面ID连接。到目前为止,该数据库查询不在函数中,因为我只是尝试获取当前页面的ID。如果提供了id,我将使用此id作为参数调用其他函数,如:

get_the_other_stuff($currentPageId)
但这不是现在的问题所在。:)

1 个回复
SO网友:Johansson

由于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
    }
};
现在,您可以检查是否在管理AJAX中设置了ID:

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!
}
给你。

注意

我还建议您使用REST API而不是Admin AJAX。设置起来更容易、更快。看看我的答案here.

更新,而不是创建隐藏输入,您还可以使用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调用中使用。

结束