Wordpress加载sidebar.php与Ajax - 加载错误的内容(index.php而不是)

时间:2014-11-07 08:50:44

标签: javascript php jquery ajax wordpress

我几乎要用Ajax加载wordpress中的侧边栏,使用这个例子( https://wordpress.stackexchange.com/questions/61830/use-ajax-request-to-load-sidebar

但是它不是加载我的新sidebar-ajax.php,而是总是在名为“sidebar”的div中加载index.php。 我有感觉,我的功能(get_template_part('sidebar-ajax'); )没有正确执行,但找不到错误

在我的functions.php中插入了:

add_action('wp_enqueue_scripts', 'theme_enqueue_scripts');
function theme_enqueue_scripts() {
wp_enqueue_script('jquery');
/* load your js file in footer */
wp_enqueue_script('theme-script', get_stylesheet_directory_uri() . '/your-js-file.js',   
false, false, true);
}

add_action('wp_ajax_get_ajax_sidebar', 'check_ajax');
add_action('wp_ajax_nopriv_get_ajax_sidebar', 'check_ajax');
function check_ajax() {
?>
get_template_part('sidebar-ajax');
<?php
} ?>
我的js。文件:

jQuery.ajax({
type: 'POST',
url: location.href,
data: { get_ajax_sidebar: 1 },
success: function(data){
    jQuery('#sidebar').html(data);
}
});

在我的index.php中我添加了:

<div id="sidebar"></div>

任何帮助都非常感谢。谢谢!

2 个答案:

答案 0 :(得分:0)

get_template_part()在php标签之外......为什么?我喜欢使用get_sidebar()。试试这个:

add_action( 'wp_ajax_get_ajax_sidebar', 'check_ajax' );
add_action( 'wp_ajax_nopriv_get_ajax_sidebar', 'check_ajax' );
function check_ajax() {
    get_sidebar( 'ajax' );
}

答案 1 :(得分:0)

派对有点迟了但是,这不起作用的原因是因为你需要正确的url来调用ajax函数。在wordpress的后端,这是自动完成的,并在名为ajaxurl的javascript变量中定义。在前端你必须自己定义,这是非常直截了当的。在你的functions.php中:

add_action('wp_head','yourfunctionname_ajaxurl');
function yourfunctionname_ajaxurl() {
    ?>
    <script type="text/javascript">
    var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
    </script>
    <?php
}

现在您可以将javascript代码更改为:

jQuery.ajax({
    type: 'POST',
    url: ajaxurl,
    data: { action:'get_ajax_sidebar' },
    success: function(data){
        jQuery('#sidebar').html(data);
    }
});

可以在此处的代码中找到更多信息:wp_ajax