用is_category()构造一个if语句;在archive.php(WordPress)

时间:2012-07-25 21:50:13

标签: php wordpress if-statement

我正在尝试使用带有is_category()的if语句,以便稍后构建更大的代码片段。我不能让代码识别if语句。基本上下面我已经发布了if语句注释掉的编码。它在没有if语句的情况下工作,但是如果我取消注释if语句(和结束的大括号),则会出现错误并且页面不显示。我只在类别页面上检查这个,所以我认为它应该认识到它是一个类别页面并显示帖子(如果我在'标签'存档页面上,我可以理解它是一个问题,等等)。为什么显示会出现问题?

修改

我在相关代码BTW之前包含了一堆代码,因此有一个上下文。条件if (is_category())在应用于页面标题时起作用(即归档为NEWS类别),但是稍微向下它不起作用...

(顺便说一句,我确实知道有一个WordPress堆栈交换网站,但我很少在那里得到我的问题的答案。我也在那里提交了这个问题,但是认为有人可以在这里帮助我,因为答案是PHP相关。谢谢!)

  <?php $post = $posts[0]; // Hack. Set $post so that the_date() works. ?>
  <?php /* If this is a category archive */ if (is_category()) { ?>
    <?php _e('<p>Archive for the &middot;</p>', 'life-is-simple'); ?><h1><?php single_cat_title(); ?></h1><?php _e('<p>&middot; Category...</p>', 'life-is-simple'); ?>
  <?php /* If this is a tag archive */ } elseif( is_tag() ) { ?>
    <?php _e('<p>Posts tagged &middot;</p>', 'life-is-simple'); ?><h1><?php single_tag_title(); ?></h1><p>&middot;...</p>
  <?php /* If this is a daily archive */ } elseif (is_day()) { ?>
    <?php _e('<p>Archive for </p>', 'life-is-simple'); ?><h1><?php the_time('F jS, Y'); ?></h1><p>...</p>
  <?php /* If this is a monthly archive */ } elseif (is_month()) { ?>
    <?php _e('<p>Archive for </p>', 'life-is-simple'); ?><h1><?php the_time('F, Y'); ?></h1><p>...</p>
  <?php /* If this is a yearly archive */ } elseif (is_year()) { ?>
    <?php _e('<p>Archive for </p>', 'life-is-simple'); ?><h1><?php the_time('Y'); ?></h1><p>...</p>
  <?php /* If this is an author archive */ } elseif (is_author()) { ?>
    <?php _e('<p>Archive for the author &middot;</p>', 'life-is-simple'); ?><h1><?php echo $curauth->display_name; ?></h1><p>&middot;...</p>
  <?php /* If this is a paged archive */ } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?>
    <?php _e('<p>Blog archives...</p>', 'life-is-simple'); ?>
  <?php } ?>

<?php if (have_posts()) : ?>

<ul style="list-style-type:none;">
<?php
/*if (is_category()) {*/
if ($paged == 0)
  $offset = 0;
else
  $offset = ($paged - 1) * 11;
global $post;
$category = get_the_category($post->ID);
$category = $category[0]->cat_ID;
$myposts = get_posts(array('numberposts' => 11, 'offset' => $offset, 'category__in' => array($category), 'post__not_in' => array($post->ID),'post_status'=>'publish'));
foreach($myposts as $post) :
setup_postdata($post);
/*}*/
?>

3 个答案:

答案 0 :(得分:0)

问题不在于if is_category()检查。您只需尝试验证自己:

if(is_category()) {
  echo "category!";
}

当我尝试按原样运行代码时,我也“出错”。这种类型的超级错误意味着PHP格式错误,以至于PHP甚至无法告诉您在哪里寻找解决问题的方法。

以下是我重写代码以便运行的方法:

if ($paged == 0) {
  $offset = 0;
}
else {
  $offset = ($paged - 1) * 11;
}

global $post;
$category = get_the_category($post->ID);
$category = $category[0]->cat_ID;
$myposts = get_posts(array('numberposts' => 11, 'offset' => $offset, 'category__in' =>   array($category), 'post__not_in' => array($post->ID),'post_status'=>'publish'));
foreach($myposts as $post) {
  setup_postdata($post);
}

答案 1 :(得分:0)

像itecedor所说的那样,你的条件没有任何问题(除了不常见但不相关的关键词之后的空格)

我已经将foreach的语法更改为更传统的语法,并且500错误消失了:

foreach($myposts as $post) setup_postdata($post);

答案 2 :(得分:0)

问题是你不能终止你的foreach。 If,While和Foreach语句可以通过以下两种方式之一设置:

不太常用的方法:

<?php
if(true) :
    do_stuff();
endif;
while(true) :
    do_stuff();
endwhile;
foreach($arr as $var) :
    do_stuff();
endforeach;
?>

常用方法:

<?php
if(true)
{
    do_stuff();
}
while(true)
{
    do_stuff();
}
foreach($arr as $var)
{
    do_stuff();
}
?>

您应该像这样设置代码:

<?php
if (is_category())
{
    $offset = $paged ? ($paged - 1) * 11 : 0;
    global $post;
    $category = get_the_category($post->ID);
    $category = $category[0]->cat_ID;
    $myposts = get_posts(array('numberposts' => 11, 'offset' => $offset, 'category__in' => array($category), 'post__not_in' => array($post->ID),'post_status'=>'publish'));
    foreach($myposts as $post)
    {
        setup_postdata($post);
        the_title(); //JUST SO YOU KNOW IT'S WORKING
    }
}
?>