0

Wordpress サイドバーに追加されたスライダーのカテゴリに属する​​投稿のメイン画像を表示する必要があります。ページにいる場合、コードは完全に機能しますが、ホームページや検索結果ページでは機能しません。これが私のコードです:

<ul id="sliderContent">
    <?php
 $joiners .= " LEFT OUTER JOIN wp_term_relationships r ON r.object_id = wp_posts.ID
 LEFT OUTER JOIN wp_term_taxonomy x ON x.term_taxonomy_id = r.term_taxonomy_id 
 LEFT OUTER JOIN wp_terms t ON t.term_id = x.term_id ";
 $sentgeters .= " AND t.slug = 'CATEGORY_NAME_GOES_HERE' ";

        $querystr = "
                SELECT wp_posts.* 
                FROM wp_posts ".$joiners."  
                WHERE wp_posts.post_status = 'publish' 
                AND wp_posts.post_type = 'post' ".$sentgeters."
                ORDER BY RAND() " ;

        $pageposts = $wpdb->get_results($querystr, OBJECT);

    ?>

    <?php if ($pageposts): ?>
     <?php global $post; ?>
     <?php foreach ($pageposts as $post): ?>
     <?php setup_postdata($post); ?>

    <li class="sliderImage">
        <a href="<?php the_permalink() ?>"><?php main_image(); ?></a>
        <span class="top"><?php the_title(); ?></span>
    </li>


    <?php endforeach; ?>
    <?php endif; ?>
    <div class="clear sliderImage"></div>
</ul>

main_image() は、投稿にアップロードされた最初の画像を表示するために作成した関数です。何か案が?

4

1 に答える 1

3

なぜカスタム クエリを作成するのですか? wordpress では、get_posts または query_posts を使用することをお勧めします。

参照: http://codex.wordpress.org/Template_Tags/get_posts

<?php $posts_array = get_posts( array(
    'posts_per_page'   => 5,
    'offset'           => 0,
    'category'         => $cat_id,
    'orderby'          => 'post_date',
    'order'            => 'DESC',
    'include'          => '',
    'exclude'          => '',
    'meta_key'         => '',
    'meta_value'       => '',
    'post_type'        => 'post',
    'post_mime_type'   => '',
    'post_parent'      => '',
    'post_status'      => 'publish',
    'suppress_filters' => true ) ); ?>

注:カテゴリ パラメータは、カテゴリ名ではなく、カテゴリの ID である必要があります。

カテゴリ ID を取得するには:

<?php $cat_id = get_category_by_slug( $slug ); ?>

そして foreach:

foreach ($posts_array as $p) {
  print_r ($p);
}

コードが読みやすく、保守が容易になり、最も重要なことに、問題が発生しなくなります。

于 2013-09-28T10:22:28.867 に答える