【问题标题】:Load Wordpress post without get_header() and get_footer()在没有 get_header() 和 get_footer() 的情况下加载 Wordpress 帖子
【发布时间】:2016-08-07 21:01:17
【问题描述】:

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

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

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

我认为使用不同的模板是一种选择,尽管我看到过使用相同模板的网站(例如 themeforest 上的 Zoo 主题)。但我无法弄清楚它是如何在那里工作的。

所以我被困在这里。有人吗?

【问题讨论】:

  • popup 不够直观,iframe 还是新的 dom 元素?我认为如果您加载整个页面只是为了获取内容非常慢,您可以不运行自己的自定义 ajax 来提取帖子内容吗?
  • 不确定如何描述弹出窗口;这是一个Magnific Popup,内容是用ajax加载的。整个页面确实在加载,而这正是问题所在:如何只加载循环?

标签: php jquery ajax wordpress magnific-popup


【解决方案1】:

干净的解决方案是使用 WordPress AJAX 函数。

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

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

<?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
}

对应的JavaScript部分:

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.
});

my_action是整个流程的标识,两部分要一致。

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

【讨论】:

  • 谢谢,现在我明白了如何在不使用其他模板或条件标签的情况下仅提取内容而不是整个页面。虽然这里的代码我不是很懂,但我还是试着实现一下吧
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2019-09-12
    相关资源
    最近更新 更多