投稿者を投稿者でフィルタしようとしています。 '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>'; }
これはあなたがあなたのコードに持っているものからの期待される出力です。アーカイブページやホームページでカスタムクエリのメインクエリを変更しないでください。メインクエリはこれらのページでは非常に限定されているため、カスタムクエリは常に面倒です。
ターゲットとする特定のアーカイブページまたはホームページのメインクエリを変更するために 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_slug
をterms
としてあなたの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_names
をterms
に渡すだけです。
'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"
}