私はカスタム投稿タイプmyposttype
を持っており、その分類法はmyposttype_categories
と呼ばれています。
myposttype_categories
には、foo
やbar
のように、内部に複数の用語があります。
難しい質問です - foo
(またはbar
)に属するすべてのmyposttype投稿を一覧表示するにはどうすればよいですか?
私はこれでうまくいくはずだと思いました、しかしそれはしません:
$args = array(
'post_type' => 'myposttype',
'myposttype_categories'=> 'foo');
$loop = new WP_Query( $args );
そしてループは常に空です。
私はWP_Query()のためにおそらくすべての 分類パラメータを試してみました またチェックしました カテゴリパラメータ .
この問題を取り上げた非常に古い投稿がありますが、3年経ってもまだ機能しないようです…。それとも私は何かが足りないのですか?
http://wordpress.org/support/topic/wp_query-and-custom-taxonomies
http://core.trac.wordpress.org/ticket/13582
[編集]
私は自分の投稿タイプを登録する方法です。
add_action('init', 'myposttype_register');
function myposttype_register() {
$labels = array(
'name' => _x('Myposttype', 'post type general name'),
'singular_name' => _x('Myposttype item', 'myposttype item'),
'add_new' => _x('Add Myposttype', 'myposttype item'),
'add_new_item' => __('Add New Item'),
'edit_item' => __('Edit Item'),
'new_item' => __('New Item'),
'view_item' => __('View Item'),
'search_items' => __('Search Items'),
'not_found' => __('Nothing found'),
'not_found_in_trash' => __('Nothing found in Trash'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'menu_icon' => get_stylesheet_directory_uri() . '/article16.png',
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','thumbnail','page-attributes','comments','trackbacks'),
'show_in_nav_menus' => true,
);
register_post_type( 'myposttype' , $args );
}
そして分類学:
register_taxonomy("myposttype_categories", array("myposttype"), array("hierarchical" => true, "label" => "Categories", "singular_label" => "Type", "rewrite" => true));
tax_query
をすることについてはどうですか?
$args = array(
'post_type' => 'myposttype',
'tax_query'=> array(
'taxonomy' => 'myposttype_categories',
'terms' => array('foo'),
'field' => 'slug',
)
);
$loop = new WP_Query( $args );
var_dump($loop);
Facepalm質問、あなたはこれらの分類/ポストタイプが存在すること、そしてそれらの下に投稿されたポストがあることを確信していますか?
更新
クエリは私にとってはうまくいくように思えます、そして私はその用語/カテゴリで追加した投稿のリストを表示することができます。私はあなたのregister_taxonomy
呼び出しをinit
で起動する関数に移しました。 コーデックスによっては、アクションの外側でregister_taxonomy
を呼び出すことはお勧めできません そしてあなたの問題の原因となるかもしれません。
add_action('init', 'myposttype_register');
function myposttype_register() {
$labels = array(
'name' => _x('Myposttype', 'post type general name'),
'singular_name' => _x('Myposttype item', 'myposttype item'),
'add_new' => _x('Add Myposttype', 'myposttype item'),
'add_new_item' => __('Add New Item'),
'edit_item' => __('Edit Item'),
'new_item' => __('New Item'),
'view_item' => __('View Item'),
'search_items' => __('Search Items'),
'not_found' => __('Nothing found'),
'not_found_in_trash' => __('Nothing found in Trash'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'menu_icon' => get_stylesheet_directory_uri() . '/article16.png',
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','thumbnail','page-attributes','comments','trackbacks'),
'show_in_nav_menus' => true,
);
register_post_type( 'myposttype' , $args );
register_taxonomy("myposttype_categories", array("myposttype"), array("hierarchical" => true, "label" => "Categories", "singular_label" => "Type", "rewrite" => true));
}
そしてクエリ:
$args = array(
'post_type' => 'myposttype',
'myposttype_categories'=> 'foo');
$my_query = new WP_Query( $args );
if( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php
endwhile;
}
wp_reset_query();
その価値のために、以下の両方とも引数として機能しますが、単一の分類法を照会するだけなので、おそらくtax_query
を使用する必要はありません。私はあなたが両方の用語で投稿を見つける必要があると思ったので最初にそれを使いました。
$args = array( 'myposttype_categories'=> 'foo' );
そして
$args = array(
'post_type' => 'myposttype',
'tax_query' => array(
array(
'taxonomy' => 'myposttype_categories',
'terms' => array('foo'),
'field' => 'slug'
)
)
);