加载没有get_header()和get_footer()的Wordpress帖子

时间:2016-08-07 21:01:17

标签: php jquery ajax wordpress magnific-popup

我正在开发一个wordpress网站,其中的帖子在带有ajax的弹出窗口中加载(Magnific Popup)。帖子使用的是模板single.php

这很好,除了页眉和页脚也加载到弹出窗口(html标签,导航,脚本......)。我当然可以从模板中删除get_header()get_footer(),但是通过固定链接无法正确加载单个帖子页。

我尝试了条件标签,但是当模板加载了Ajax时,它并没有“看到”它被加载到主页上。

我认为使用不同的模板是一种选择,虽然我已经看到使用相同模板的网站(如themeforest上的Zoo主题)。但我无法弄清楚它是如何起作用的。

所以我被困在这里。任何人

2 个答案:

答案 0 :(得分:1)

干净的解决方案是使用WordPress AJAX功能。

现在主题通常分为多个部分,以便在不同的地方重用块。例如,主题twentysixteen在pre_system中使用get_template_part( 'template-parts/content', 'single' );来包含显示文件实际内容的模板文件。您可以轻松地使用它来获取帖子的内容,而不需要页眉,页脚等。

首先,设置PHP部分,你可以在主题的functions.php中或直接在你的插件中添加它,具体取决于你正在开发的内容。

single.php

相应的JavaScript部分:

<?php 
// for the admin area
add_action( 'wp_ajax_my_action', 'my_action_callback' );
// for the public area
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );

function my_action_callback() {

    $postid = intval( $_POST['postid'] );
    $post = get_post( $postid );
    setup_postdata( $post );
    get_template_part( 'template-parts/content', 'single' );

    wp_die(); // this is required to terminate immediately and return a proper response
}

var data = { 'action': 'my_action', 'postid': 1234 }; // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php // on the frontend you have to set it yourself var ajaxurl = '<?=admin_url( 'admin-ajax.php' )?>'; jQuery.post(ajaxurl, data, function(response) { // alert('Got this from the server: ' + response); // response will now contain your post, without header, footer, sidebars etc. }); 是整个过程的标识符,必须在两个部分之间保持一致。

WordPress AJAX支持的文档:https://codex.wordpress.org/AJAX_in_Plugins

答案 1 :(得分:1)

我终于发现这个选项包含在Magnific Popup插件中:&#34;要在加载后修改内容,或者从加载的文件中选择并显示特定元素,有一个{{1回调&#34;。

但我接受上述答案,因为我认为这是一种优雅的方式,而不是加载整个页面而只显示所需的部分。