Dynamically tax_query terms

时间:2016-03-06 作者:Babu

要显示自定义分类法中所有类别名称的复选框,请调用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\']. If name属性taxonomy_category[\'.$term->term_id.\'] 可以在中显示为数组\'terms\' =>, 问题将得到解决。花了很多时间搜索谷歌,但找不到任何解决方案。

这是完整的代码

<?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 );
?>

2 个回复
SO网友:Milo

如果$taxonomy_category 已是数组,则:

\'terms\' => array($taxonomy_category)
应该是:

\'terms\' => $taxonomy_category
在哪里$taxonomy_category 等于从您的表单中提交的内容$_POST[\'taxonomy_category\']$_GET[\'taxonomy_category\']

SO网友:willrich33

这是一个需要我花时间调试的高级问题。但是,我认为“field”的“id”值不正确。根据文件,

字段(字符串)-选择分类术语依据。可能的值为“term\\u id”、“name”、“slug”或“term\\u taxonomy\\u id”。默认值为“term\\u id”。

我想你想要term\\u id。。。

尝试2:

单击名为“ct\\U类别”的自定义分类法,并获取分类法的slug。您可以在后端(可能是自定义帖子类型的子菜单)中执行此操作。

设置tax\\u查询

$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\\u id一起工作。

相关推荐

GET_THE_TERMS与wp_GET_POST_TERMS中的奇怪结果

我正在尝试制作一个面包屑函数,但有一个小问题。。。使用时:$categories = get_the_terms( $post->ID, \'product_cat\' ); 我得到了一个循环中使用的类别数组,等等。唯一的问题是它是按字母顺序排列的。(我希望它按层次顺序排列。)经过一番挖掘,我发现了一种替代方法,即使用wp\\u get\\u post\\u terms(),但我肯定遗漏了一些东西,因为当我使用此方法时:$categories = wp_get_post_terms( $p