我遇到了一个奇怪的问题。
我有一个定制的循环get_posts
正常加载页面时效果良好:
<?php
$rows = get_posts(array(
\'post_type\' => \'drinks\',
\'numberposts\' => -1
));
?>
<?php foreach ($rows as $post) : setup_postdata($post) ?>
<?php the_post_thumbnail() ?>
<h3><?php the_title() ?></h3>
<?php the_content() ?>
<?php the_permalink() ?>
<?php endforeach; wp_reset_postdata() ?>
该代码位于其自己的名为“drinks.php”的模板中。
现在,我已经设置了一个AJAX函数/URL,以使用jQuery获取此模板:
add_action(\'wp_ajax_h5b_get_user_drinks\', \'h5b_ajax_get_user_drinks\');
add_action(\'wp_ajax_nopriv_h5b_get_user_drinks\', \'h5b_ajax_get_user_drinks\');
function h5b_ajax_get_user_drinks () {
include \'drinks.php\';
die;
}
然而,当我用AJAX获取它时,似乎两者都不是
the_title()
,
the_post_thumbnail()
或
the_permalink()
工作
the_content()
但似乎效果不错。
如果我var_dump($post)
在我的循环中,它拥有它应该拥有的所有数据(如标题、guid等)。
怎么会这样?
SO网友:Stephen Harris
你需要好好照顾$post
作为全局,请尝试:
global $post;
<?php foreach ($rows as $post) : setup_postdata($post) ?>
<?php the_post_thumbnail() ?>
<h3><?php the_title() ?></h3>
<?php the_content() ?>
<?php the_permalink() ?>
<?php endforeach; wp_reset_postdata() ?>
这些函数中的大多数只能在循环内工作(并且在没有参数的情况下使用所有函数)。这意味着
$post
指向相应的帖子。
Note: setup_postdata($post)
不能这样做!因此,您需要手动声明global $post
.
公认的答案可能提供了一个更为美观的答案get_template_part()
, 依次调用load_template()
via公司(locate_template()
). 查看源代码-这声明$post
变量作为全局变量,来自注释:
为模板文件设置globals,以确保WordPress环境在函数中可用。
因此它可以工作:)。