すべてのカテゴリ名をct_category
というカスタム分類法のチェックボックス付きで表示するには、次のコードを使います。
$terms = get_terms('ct_category');
foreach ( $terms as $term ) {
echo '<li class='.$term->term_id.'><label > <input class="taxonomy_category" type="checkbox" name="taxonomy_category['.$term->term_id.']" value ="'.$term->term_id.'" />'.$term->name.'</label ></li>';
}
チェックしたカテゴリのコンテンツのみを表示したいです。私はフォローしてみたがうまくいかなかった:
$args = array(
'post_type' => 'cpt',
'tax_query' => array(
array(
'taxonomy' => $ct_category,
'field' => 'term_id',
'terms' => $_POST['taxonomy_category']
)
)
);
$loop = new WP_Query( $args );
問題は'terms' => $_POST['taxonomy_category']
にあると思います。名前属性taxonomy_category['.$term->term_id.']
を'terms' =>
内の配列として表示できる場合は、問題は解決します。 Googleでの検索に多くの時間を費やしましたが、解決策が見つかりませんでした。
これが完全なコードです
<?php
function add_meta_box() {
add_meta_box( 'ct_metabox', 'CT', 'meta_box_content_output', 'cpt', 'normal' );
}
add_action( 'add_meta_boxes', 'add_meta_box' );
function meta_box_content_output ( $post ) {
wp_nonce_field( 'save_meta_box_data', 'meta_box_nonce' );
$taxonomy_category = get_post_meta( $post->ID, 'taxonomy_category', true );
function categories_checkbox(){
$terms = get_terms('ct_category');
foreach ( $terms as $term ) {
echo '<li class='.$term->term_id.'><label > <input class="taxonomy_category" type="checkbox" name="taxonomy_category['.$term->term_id.']" value ="'.$term->term_id.'" />'.$term->name.'</label ></li>';
}
}
<?
<ul>
<li>
<?php categories_checkbox() ?>
<li>
</ul>
<?php
}
function save_meta_box_data( $post_id ) {
// Check if our nonce is set.
if ( ! isset( $_POST['meta_box_nonce'] ) ) {
return;
}
// Verify that the nonce is valid.
if ( ! wp_verify_nonce( $_POST['meta_box_nonce'], 'save_meta_box_data' ) ) {
return;
}
// If this is an autosave, our form has not been submitted, so we don't want to do anything.
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
// Check the user's permissions.
if ( isset( $_POST['post_type'] ) && 'page' == $_POST['post_type'] ) {
if ( ! current_user_can( 'edit_page', $post_id ) ) {
return;
}
} else {
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
}
$taxonomy_category_value = "";
if(isset($_POST["logo_taxonomy_category"])) {
$taxonomy_category_value = sanitize_text_field( $_POST["logo_taxonomy_category"] );
}
update_post_meta($post_id, "logo_taxonomy_category", $taxonomy_category_value);
}
add_action( 'save_post', 'save_meta_box_data' );
?>
<?php
$args = array(
'post_type' => 'cpt',
'tax_query' => array(
array(
'taxonomy' => $ct_category,
'field' => 'term_id',
'terms' => $taxonomy_category
)
)
);
$loop = new WP_Query( $args );
?>
$taxonomy_category
がすでに配列の場合、
'terms' => array($taxonomy_category)
ただでなければなりません:
'terms' => $taxonomy_category
$taxonomy_category
は、フォームから$_POST['taxonomy_category']
または$_GET['taxonomy_category']
として送信されたものと同じです。
デバッグに時間がかかるような高度な質問です。しかし、 'field'の 'id'値は正しくないと思います。ドキュメンテーションから、
field(文字列) - による分類用語を選択します。可能な値は 'term_id'、 'name'、 'slug'または 'term_taxonomy_id'です。デフォルト値は 'term_id'です。
Term_idが欲しいと思います...
2を試してみてください。
「ct_category」というカスタム分類法をクリックして、分類法のスラッグを取得します。これはバックエンドで、おそらくカスタム投稿タイプのサブメニューで行います。
tax_queryを設定する
$tax_args = array(
array('taxonomy' => 'ct_category',
'field' => 'slug',
'terms' => 'term_slug',
'operator' => 'IN')
);
引数を設定する
$args = array('post_type' => 'cpt',
'post_status' => 'publish',
'posts_per_page'=>-1,
'tax_query'=>$tax_args);
$query = new WP_Query($args);
それがうまくいくかどうかを確認してください。それからterm_idでうまく動くようにしてください。