测试‘if/Else’语句中的帖子标题不返回任何内容

时间:2012-10-07 作者:Max Chandler

我在一个关于页面上测试某个固定帖子,我猜最好的方法是测试帖子标题(?)。

这是我的密码,怎么了?

<?php
if (is_page()) {
  $cat=get_cat_ID($post->post_title);
  $posts = get_posts ("cat=$cat&showposts=35");

  if ($posts) {
    foreach ($posts as $post):
      setup_postdata($post); ?>
        <div class="clear"></div>
            <h3><?php the_title(); ?></h3>
        <div class="clear"></div>

<?php    if ($post->post_title(\'skillset\')) {
            echo \'<div class="content">\';
                the_content(\'\');
            echo \'</div>\'; 
    }
        else{
        the_content(\'\');
        }
                endforeach;
  }
}
?>

2 个回复
最合适的回答,由SO网友:Johannes Pille 整理而成

首先,$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();
}

SO网友:Miha Rekar

最好的方法是搜索ID,而不是标题!那么您的if将是:

if ($post->ID === 123)
其中123是要“筛选”的帖子的ID。

结束

相关推荐

Updating URLs in many posts

我将我的WP内容复制到另一台服务器上的新安装中,因此现在我上载的PDF文档具有旧的URL。有没有一种简单的方法可以在我所有的帖子中一次解决这个问题,也许可以使用SQL或一些插件?