0

WordPressのサイドバーで次のコードを機能させるのに問題があります。

            $the_query = get_posts( $args );


            $year_post = 0;
            foreach ($the_query as $post) : 
                setup_postdata($post);
                $current_year = get_the_time('Y'); 
                if( $current_year != $year_post ) {
                    $year_post = $current_year;
                    echo '<li><a href="'.get_year_link($current_year).'">'.$current_year.'</a></li>';
                }
                $month_post = 0;
                foreach ($post as $post_monthly) : 
                       setup_postdata($post_monthly);  
                       $current_month = get_the_time('m');
                        if ($current_month != $month_post){
                               $month_post =$current_month;
                               echo '<li><a href="'.get_year_link($current_month).'">'.$current_month.'</a></li>';
                        }

                        foreach ($post_monthly as $post_title) : 
                                setup_postdata($post_title);

                                echo '<li><a href="'.get_permalink().'">'.the_title().'</a></li>';
                        endforeach;

                endforeach;

            endforeach;

            wp_reset_postdata();

このコードで私は以下を表示しようとしています:

  • 2012年
    -5月
    • Lorem ipsum
    • Lorem ipsum
    • Lorem ipsum

2012年5月が表示されますが、投稿のタイトルを表示すると、次のエラーが発生します:「警告:foreach()に無効な引数が指定されました」

このコードを何度もチェックしましたが、問題が発生していないようです。

私が見逃しているものを誰かが見ることができますか、それは高く評価されます。ありがとう!

4

4 に答える 4

2

$post_monthly$post_titleが実際に配列であるかどうかを確認する必要があります。を使用してそれを行うことができますvar_dump()

ある月に投稿がない場合、変数の値は次のようになる可能性がありますnull(私はワードプレスの専門家ではありませんが、それがエラーメッセージの説明になります)。ループの前後に!empty()条件を設定することで、これを軽減できます。is_array()

于 2012-05-24T09:41:34.400 に答える
2

$ arrayの前に(配列)を追加します。

foreach ((array)$post...

空のものとこのような警告を無視する

于 2012-05-24T10:07:16.923 に答える
2

例えば:

<?php   

    $args = array(

    'post_type' => 'art',

    'post_status' => 'publish',

    'posts_per_page' => -1,

    ); ?>
    <?php $my_posts = get_posts( $args );

    foreach($my_posts as $my_post){ ?>
    <?php $image = wp_get_attachment_image_src( get_post_thumbnail_id($my_post->ID),array(500,500)); ?>
        <div class="view_list">
        <div class="flt1 ">  <img src="<?php print $image[0]; ?> "></div>   

        <ul>
            <li> <? echo  $my_post->post_title; ?> </li>
            <li> <? echo the_time('l, F j, Y'); ?> </li>
            <?php $terms = wp_get_post_terms( $my_post->ID, array( 'act', 'subject' ) ); ?>
            <? // print_r ( $terms); ?>

            <img src="<?php echo $url[0]; ?>"  alt="" />
            <li><?php foreach ( $terms as $term ) : ?>
            <? $term_link = get_term_link( $term ); ?>
            <?php //echo $term->taxonomy; ?><a href="<? echo $term_link  ?>"><?php echo $term->name; ?></a> 
            <?php endforeach; ?></li>   
            <?php echo get_field('Height', $my_post->ID) .'*' .get_field('width', $my_post->ID) ;  ?></li>
        </ul>

        </div>  <? }?>
于 2014-12-24T14:20:33.717 に答える
1

の戻り値はget_posts()オブジェクトの配列です。したがって、に$postは配列ではなくオブジェクトが含まれます。 http://codex.wordpress.org/Template_Tags/get_posts

于 2012-05-24T09:44:49.067 に答える