web-dev-qa-db-ja.com

カスタム分類法用語で投稿を絞り込む

投稿者を投稿者でフィルタしようとしています。 'post_author'はカスタムの分類法です。私は自分の引数に含めました。投稿はリンクされた著者名で表示されていますが、著者名のリンクをクリックするとすべての著者が表示されます。クリックされた著者のみを表示する方法はありますか関連するコードを含めました。

//ADD THE TAXONOMY 'post_authors' TO MY CUSTOM POST TYPE
function add_custom_taxonomies() {
   register_taxonomy('post_authors', 'my-post-type', array(
   'hierarchical' => true,
   'labels' => array(
   'name' => _x( 'Authors', 'taxonomy general name' ),
   'singular_name' => _x( 'Author', 'taxonomy singular name' ),
   'search_items' =>  __( 'Search Authors' ),
   'all_items' => __( 'All Authors' ),
   'parent_item' => __( 'Parent Author' ),
   'parent_item_colon' => __( 'Parent Author:' ),
   'edit_item' => __( 'Edit Author' ),
   'update_item' => __( 'Update Author' ),
   'add_new_item' => __( 'Add New Author' ),
   'new_item_name' => __( 'New Author Name' ),
   'menu_name' => __( 'Authors' ),
   ),
   // Control the slugs used for this taxonomy
   'rewrite' => array(
   'slug' => 'post-authors', // This controls the base slug that will display before each term
   'with_front' => false, // Don't display the category base before "/authors/"
   'hierarchical' => true // This will allow URL's like "/authors/lorem/ipsum/"
 ),
));
}
add_action( 'init', 'add_custom_taxonomies', 0 );


// and in my archive page......

//ARGS
$args = array( 
    'post_type' => 'my-post-type',
    'order' => 'DESC',
    'tax_query' => array(
        array(
            'taxonomy' => 'post_authors',
            'field'    => 'slug',
            'terms'    => 'Jill Jones',
        ),
    ),
);



//RETRIEVES AUTHOR NAME FROM CUSTOM TAXONOMY
$terms = get_the_terms( $post->ID, 'post_authors' );

if ($terms) {
    $terms_name = array();
    foreach ( $terms as $term ) {
    // The $term is an object, so we don't need to specify the $taxonomy.
    $term_link = get_term_link( $term );
    $terms_name[] = $term->name;
    // If there was an error, continue to the next term.
    if ( is_wp_error( $term_link ) ) {
      continue;
    }
}
$author_name = $terms_name[0]; 
}



//RETRIEVING THE AUTHOR NAME IN LOOP
if ( $post_typed == ('my-post-type') && $author_name  != '' )  {  echo '<a href="' . esc_url( $term_link ) . '    ">' . $author_name . '</a>'; } 
1
amespower

これはあなたがあなたのコードに持っているものからの期待される出力です。アーカイブページやホームページでカスタムクエリのメインクエリを変更しないでください。メインクエリはこれらのページでは非常に限定されているため、カスタムクエリは常に面倒です。

ターゲットとする特定のアーカイブページまたはホームページのメインクエリを変更するために pre_get_posts を使用して、デフォルトのループをそのままにすることをお勧めします。

また、あなたの納税申告書は完全に間違っています。それは配列の配列であるべきです。 WP_Query で税の問い合わせを作成する方法をご覧ください。

さらに読み、理解を深めるために、 私の回答 を参照してください。

サンプルコード(functions.phpに配置し、taxonomy.phpのデフォルトループに戻る):

function custom_author_page( $query ) {
    if ( !is_admin() && $query->is_tax( 'post_authors' ) && $query->is_main_query() ) {

        $query->set( 'post_type', 'my-post-type' );
        $query->set( 'order', 'DESC' );

    }
}
add_action( 'pre_get_posts', 'custom_author_page' );

編集

あなたのコメントから、あなたはあなたのタクソノミーテンプレート taxonomy-post-author.php というタクソノミーpostと用語authorに名前を付けました。分類テンプレートの名前を taxonomy-post_authors.php に変更します。

EDIT 2

オプション1

分類ページをデフォルトのループだけに変更し、カスタムループは変更しないでください。

<?php 
if ( have_posts() ) {
    while ( have_posts() ) {
        the_post(); 
        //
        // Post Content here
        //
    } // end while
} // end if
?>

上記のようにメインクエリをpre_get_postsで変更します。これは正しい方法です

オプション2

get_queried_object('term');を使って問い合わせた用語を取得し、それからその用語のスラッグを返します。 PS!このコードは分類法のページで使われるべきです

$queried_object = get_queried_object('term');
$term_slug = $queried_object->slug;

$term_slugtermsとしてあなたのtax_queryに返します

EDIT 3

特定の分類法から用語名/スラッグ/ IDの配列を取得するには、 get_terms() を使用します。

$terms = get_terms('post_authors');

$term_names = array();

if ( !empty( $terms ) && !is_wp_error( $terms ) ) { 

    foreach ( $terms as $key=>$term){
        $term_names[$key] = $term->name;
    }
}

$term_namestermsに渡すだけです。

'terms'    => $term_names

編集4

つかいます

<pre><?php var_dump($term_names); ?></pre>

配列を印刷します。出力はこのようになります

array(6) {
  [0]=>
  string(12) "Admin se pen"
  [1]=>
  string(11) "Besprekings"
  [5]=>
  string(12) "Toets Parent"
  [6]=>
  string(15) "Uit die grapkas"
  [7]=>
  string(14) "Uit die koskas"
  [8]=>
  string(11) "Uit my lewe"
}
2
Pieter Goosen