-1

後でより大きなコードを作成するために、is_category() で if ステートメントを使用しようとしています。ただし、ifステートメントを認識するコードを取得できません。基本的に以下に、if ステートメントをコメントアウトしてコーディングを投稿しました。if ステートメントがなくても機能しますが、if ステートメント (および右中括弧) のコメントを外すと、エラーが発生し、ページが表示されません。これはカテゴリページでのみチェックしているので、カテゴリページであると認識して投稿を表示するはずだと思いました(「タグ」アーカイブページなどにいた場合、問題があることは理解できます)。表示に問題があるのはなぜですか?

編集

ところで、関連するコードの前に一連のコードを含めたので、コンテキストがあります。ページのタイトル (つまり、NEWS カテゴリのアーカイブ) に適用すると条件付きがif (is_category())機能しますが、少し下では機能しません...

(ところで、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);
/*}*/
?>
4

3 に答える 3

0

like itecedor said, there's nothing problematic about your conditional ( apart from the not-so-usual but irrelevant, space after the keyword if)

i've changed the syntax for the foreach to a more conventional syntax and the 500 error is gone:

foreach($myposts as $post) setup_postdata($post);
于 2012-07-26T01:38:33.913 に答える
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);
}
于 2012-07-25T22:09:37.830 に答える
0

問題は、foreach を終了していないことです。If、While、および Foreach ステートメントは、次の 2 つの方法のいずれかで設定できます。

あまり一般的でない方法:

<?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
    }
}
?>
于 2012-07-26T02:21:48.873 に答える