0

taxonomy.phpWordpress サイトを構築していて、すべての投稿をカスタム カテゴリとカスタム分類法で表示するように変更する方法を見つけようとしていますが、行き詰っています。状況は次のとおりです。

「仕事」というカスタム投稿タイプがあります。taxonomy.phpそのカスタム投稿タイプ内に、「プロジェクト タイプ」と呼ばれるカスタム分類があり、写真、ビデオ、印刷デザインなどと呼ばれるいくつかのカテゴリを作成しました。mydomain.com/ work と mydomain を管理するというテンプレートをセットアップしました。 com/project-type/print-design/. 問題は、これらのページに最新の 5 つの投稿しか表示されないことです。適切なカテゴリのすべての投稿を表示する必要があります (または、mydomain.com/work の場合、カテゴリに関係なくカスタム投稿タイプのすべての投稿)。

query_posts に関するこのページを見つけたので、追加する必要があることに気づきました<?php query_posts( array ( 'post_type' => 'work', 'posts_per_page' => -1 ) ); ?>。これで作業ページは正しく読み込まれますが、すべてのカテゴリ ページがすべての作業投稿を読み込んでいます (追加したスニペットで post_type を作業として定義したためです)。

作業ページにすべての作業投稿を表示し、カテゴリ ページに関連するカテゴリ投稿のみを表示するように、コードを一般化するにはどうすればよいですか? 完全なコードは次のとおりです。

<?php

/**
 * Project Type Taxonomy Archive
 */

$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
?>

<h3 style="color:#EEEEEE"><?php echo apply_filters( 'the_title', $term->name ); ?> PROJECTS</h3>

<ul class="thumbnails">
    <div id="work">

    <?php if ( !empty( $term->description ) ): ?>
        <div class="archive-description">
        <?php echo esc_html($term->description); ?>
        </div>
    <?php endif; ?>
    <?php query_posts( array ( 'post_type' => 'work', 'posts_per_page' => -1 ) ); ?>
    <?php if ( have_posts() ): while ( have_posts() ): the_post(); ?>

    <div class="post">
        <li class="span4">
            <div class="thumbnail">
            <a href="<?php the_permalink() ?>"><div class="tint"><?php the_post_thumbnail( 'featured-thumb' ); ?></div></a>
            <br />
            <div class="thumbcaption">
                <a href="<?php the_permalink() ?>"><h3><?php the_title() ?></h3></a>
                <p> <?php the_excerpt(); ?></p>
                <p><i><?php the_terms( $post->ID, 'work_project_type' ,  ' ' ); ?></i></p>
            </div>  
            </div>
        </li>
    </div>

    <?php endwhile; ?>

    <div class="navigation clearfix">
        <div class="alignleft"><?php next_posts_link('« Previous Entries') ?></div>
        <div class="alignright"><?php previous_posts_link('Next Entries »') ?></div>
    </div>

    <?php else: ?>

    <h2 class="post-title">No Projects in <?php echo apply_filters( 'the_title', $term->name ); ?></h2>
    <div class="content clearfix">
        <div class="entry">
            <p>It seems there aren't any projects in <strong><?php echo apply_filters( 'the_title', $term->name ); ?></strong> right now. Check back later, I try to add new projects regularly.</p>
        </div>
    </div>

    <?php endif; ?>
</div>
</div>

4

1 に答える 1

1

これに対処する 1 つの方法は、カスタム テンプレートを追加しないことです。

タクソノミー アーカイブのワードプレスに関連する URL にアクセスすると、データベースからすべての投稿が既に取得されています。別のテンプレートを作成することで、'posts_per_page' のようなクエリ引数を簡単に制御できますが、独自のクエリを実行する必要がない方がよいでしょう。

代わりに、pre_get_posts フィルターを実行することを検討してください。このようなもの。

// if on a certain taxonomy archive page, do not limit the posts
add_action('pre_get_posts', function($query){
    if (isset($query->query_vars['name_of_your_taxonomy'])) {
        add_filter('post_limits', function($limit){
            /*
            default will be something like this 'LIMIT 0, 10'
            but we don't want a limit so return empty string
            */
            return '';
        });
    }
});
于 2013-10-10T13:49:35.947 に答える