web-dev-qa-db-ja.com

Wordpress)のカスタム分類からすべての投稿を取得します

Wordpress)の分類法からすべての投稿を取得する方法はありますか?

taxonomy.php、現在の用語に関連する用語から投稿を取得するこのコードがあります。

$current_query = $wp_query->query_vars;
query_posts( array( $current_query['taxonomy'] => $current_query['term'], 'showposts' => 10 ) );

用語に関係なく、分類法のすべての投稿を含むページを作成したいと思います。

これを行う簡単な方法はありますか、それとも用語の分類法を照会してから、それらをループする必要がありますか?.

10
Andrei
$myterms = get_terms('taxonomy-name', 'orderby=none&hide_empty');    
echo  $myterms[0]->name;

最初のアイテムを投稿すると、foreach;を作成できます。ループ:

foreach ($myterms as $term) { ?>
    <li><a href="<?php echo $term->slug; ?>"><?php echo $term->name; ?></a></li> <?php
} ?>

そうすれば、それらをすべて投稿したい場合は、それらをリストします。-mysolution-foreach内に通常のwordpressループを作成しますが、次のようなものが必要です。

foreach ($myterms as $term) :

$args = array(
    'tax_query' => array(
        array(
            $term->slug
        )
    )
);

//  assigning variables to the loop
global $wp_query;
$wp_query = new WP_Query($args);

// starting loop
while ($wp_query->have_posts()) : $wp_query->the_post();

the_title();
blabla....

endwhile;

endforeach;

私は非常によく似たものを投稿しました ここ

@PaBLoXは非常に優れたソリューションを作成しましたが、少しトリッキーで、用語ごとに毎回すべての投稿をクエリする必要がないソリューションを自分で作成しました。また、1つの投稿に複数の用語が割り当てられている場合はどうなりますか?同じ投稿を複数回レンダリングしませんか?

_ <?php
     $taxonomy = 'my_taxonomy'; // this is the name of the taxonomy
     $terms = get_terms( $taxonomy, 'orderby=count&hide_empty=1' ); // for more details refer to codex please.
     $args = array(
        'post_type' => 'post',
        'tax_query' => array(
                    array(
                        'taxonomy' => 'updates',
                        'field' => 'slug',
                        'terms' => m_explode($terms,'slug')
                    )
                )
        );

     $my_query = new WP_Query( $args );
     if($my_query->have_posts()) :
         while ($my_query->have_posts()) : $my_query->the_post();

              // do what you want to do with the queried posts

          endwhile;
     endif;
  ?>
_

この関数_m_explode_は、私が_functions.php_ファイルに入れたカスタム関数です。

_    function m_explode(array $array,$key = ''){     
        if( !is_array($array) or $key == '')
             return;        
        $output = array();

        foreach( $array as $v ){        
            if( !is_object($v) ){
                return;
            }
            $output[] = $v->$key;

        }

        return $output;

      }
_

[〜#〜]更新[〜#〜]

このカスタム_m_explode_関数は必要ありません。 wp_list_pluck() 関数はまったく同じことをします。したがって、_m_explode_をwp_list_pluck()に置き換えるだけです(パラメーターは同じです)。ドライでしょ?

12
maksbd19

投稿タイプとは異なり、WordPressには分類法スラッグ自体のルートがありません。

タクソノミースラッグ自体に、タクソノミーの任意の用語が割り当てられているすべての投稿を一覧表示するには、tax_queryWP_QueryEXISTS演算子を使用する必要があります

// Register a taxonomy 'location' with slug '/location'.
register_taxonomy('location', ['post'], [
  'labels' => [
    'name' => _x('Locations', 'taxonomy', 'mydomain'),
    'singular_name' => _x('Location', 'taxonomy', 'mydomain'),
    'add_new_item' => _x('Add New Location', 'taxonomy', 'mydomain'),
  ],
  'public' => TRUE,
  'query_var' => TRUE,
  'rewrite' => [
    'slug' => 'location',
  ],
]);

// Register the path '/location' as a known route.
add_rewrite_rule('^location/?$', 'index.php?taxonomy=location', 'top');

// Use the EXISTS operator to find all posts that are
// associated with any term of the taxonomy.
add_action('pre_get_posts', 'pre_get_posts');
function pre_get_posts(\WP_Query $query) {
  if (is_admin()) {
    return;
  }
  if ($query->is_main_query() && $query->query === ['taxonomy' => 'location']) {
    $query->set('tax_query', [
      [   
        'taxonomy' => 'location',
        'operator' => 'EXISTS',
      ],  
    ]);
    // Announce this custom route as a taxonomy listing page
    // to the theme layer.
    $query->is_front_page = FALSE;
    $query->is_home = FALSE;
    $query->is_tax = TRUE;
    $query->is_archive = TRUE;
  }
}
1
sun

用語のクエリループ中に、配列内のすべての投稿参照を収集し、後で新しいWP_Queryで使用できます。

$post__in = array(); 
while ( $terms_query->have_posts() ) : $terms_query->the_post();
    // Collect posts by reference for each term
    $post__in[] = get_the_ID();
endwhile;

...

$args = array();
$args['post__in'] = $post__in;
$args['orderby'] = 'post__in';
$other_query = new WP_Query( $args );
0
Jens