Wordpress在ajax请求回调中获取当前页面名称或ID

时间:2015-05-29 05:45:39

标签: javascript php jquery ajax wordpress

我需要从ajax请求回调中获取当前页面ID或名称。最初在加载页面时我发出ajax个请求。在其回调方法中,我需要获取当前页面ID或名称。我使用了ajax请求的以下代码。

$.ajax({
        type: "POST",
        url: my_site.home_url + '/wp-admin/admin-ajax.php',
        data: {
            action: "notes_select_page"
        },
        dataType: "html",
        success: function (Response) {
            if (Response == "OK") {
                Notes.renderBoardList();
            } else {

            }
        },
        async: true
    });

我接受了action挂钩的请求。

add_action('wp_ajax_nopriv_notes_select_page', 'Notes::select_page');add_action('wp_ajax_optimal_notes_select_page', 'Notes::select_page');

回调我使用了几个代码,但不起作用。试试1.

public static function select_page(){
    global $pagename;
    die($pagename);
}

尝试2

public static function select_page(){
    global $wp_query;
    $pagename = get_query_var( 'pagename' );
    if ( !$pagename) {
        $post = $wp_query->get_queried_object();
        $pagename = $post->post_name;
    }
    die($pagename);
}

尝试3

public static function select_page(){
    global $post;
    die($post->ID);
}

但遗憾的是,其中任何一个都无法获取当前页面IDname。回调与其他值一起正常工作。 提前谢谢。

6 个答案:

答案 0 :(得分:2)

function get_current_page_id() {
    var page_body = $('body.page');

    var id = 0;

    if(page_body) {
        var classList = page_body.attr('class').split(/\s+/);

        $.each(classList, function(index, item) {
            if (item.indexOf('page-id') >= 0) {
                var item_arr = item.split('-');
                id =  item_arr[item_arr.length -1];
                return false;
            }
        });
    }
    return id;
}

你不需要ajax。 将此函数添加到您的代码中。 您现在可以使用以下方式获取页面ID:

var id = get_current_page_id();

答案 1 :(得分:1)

要检索帖子详细信息,您必须自己发送数据

data:{
    action: "notes_select_page",
    post_id: current_post_id, //current_post_id should either parsed from DOM or you can write your ajax in PHP file
}

您可以使用隐藏的框来获取当前的帖子ID,并使用类或ID获取Js文件,或者在您的php文件中编写ajax。

然后你可以通过POST检索

public static function select_page(){
    $post_id = $_POST['post_id'];

}

答案 2 :(得分:0)

只需使用get_the_id();功能如下所述。

data:{
    action: "notes_select_page",
    post_id: <?php echo get_the_id(); ?>, //current_post_id should either parsed from DOM or you can write your ajax in PHP file
}

答案 3 :(得分:0)

  1. 首先通过此功能获取页面ID
  2. 或者

        <div id="current_page_id"> <?php get_the_ID(); ?> </div>
    

          <body page-id="<?php get_the_ID(); ?>">
    

    现在在jquery中,ajax采取以下

    var page_id = $('current_page_id').html();
    

    OR

    var page_id = $('body').attr("page-id");
    
    
     $.ajax({
        type: "POST",
        url: my_site.home_url + '/wp-admin/admin-ajax.php',
        data: {
            action: "pageid="+page_id,
        },
        dataType: "html",
        success: function (Response) {
            if (Response == "OK") {
                Notes.renderBoardList();
            } else {
    
            }
        },
        async: true
    });
    

答案 4 :(得分:0)

有一个解决方案可以解决Wordpress中的问题。在wp_footer钩子中添加ajax代码,可以检索使用php代码当前页面id并作为ajax值传递。

答案 5 :(得分:0)

您可以通过隐藏字段以下列方式获取帖子/页面ID。此代码将插入模板文件中(然后该值将发送到您的ajax操作挂钩,如上所示):

    <?php
    echo '<input type="hidden" name="activepost" id="activepost" 
    value="'.get_the_ID().'" />'
    ;?>

请查看此参考:https://developer.wordpress.org/reference/functions/get_the_id/