首先,$post
是WordPress核心之一global variables 因此,不得触摸或reset 在您的foreach
环
使用setup_postdata()
允许您使用template tags 例如,您在上面的代码片段中使用the_title()
. 然而,它或它所使用的循环应该始终由它的同伴跟随wp_reset_postdata()
.
而且$post
是一个object. 对象是包含属性和/或方法(变量和函数的OOP等价物)的类的实例。
通过尝试以您的方式测试帖子标题,
if($post->post_title(\'skillset\'))
你治疗过
post_title
就好像它是一个方法,可以将所讨论的标题作为参数输入,也可以返回布尔值。然而,它是一个属性,因此包含一个您可以访问的值—就是它。
该值需要tested against 另一个值。因此
if( \'skillset\' === $post->post_title ) {
// your conditional operation
}
将是对标题的有效测试。
从本质上讲,这一行就是你标题中问题的答案。然而,由于您询问代码可能有什么问题,因此showposts
参数已被弃用一段时间。使用numberposts
相反
另外,让我们重新讨论一下使用$post
. 如果直接引用属性而不是模板标记,则无需覆盖全局$post
.
$wpse67413_posts = get_posts();
foreach( $wpse67413_posts as $wpse67413_post ) {
echo \'<h3>\' . $wpse67413_post->post_title . \'</h3>\';
}
在不接触全球的情况下也能正常工作。那只是为了完整。
另外,为什么要在这么小的空间中使用这么多的php开始和结束标记?这几乎是一个反问:这根本没有意义。
最后,您确定要执行以下操作:
$cat=get_cat_ID($post->post_title);
? 只有当您想要获取与访问者所在页面标题完全相同的类别的帖子时,这才有意义。假设答案是肯定的,下面是对上述片段的完整更正:
global $post;
if( is_page() ) {
$wpse67413_posts = get_posts( array(
cat => get_cat_ID($post->post_title),
numberposts => 35
));
if( $wpse67413_posts ) {
foreach ( $wpse67413_posts as $post ) {
setup_postdata($post);
echo \'<div class="clear"></div>\' .
\'<h3>\' get_the_title() . \'</h3>\' .
\'<div class="clear"></div>\';
if( \'skillset\' === $post->post_title ) {
echo \'<div class="content">\' . get_the_content() . \'</div>\';
} else {
the_content();
}
}
}
wp_reset_postdata();
}