2

To display all the categories name with checkbox from custom taxonomy called ct_category I have the following code:

$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>';          
}                                             

I would like to display content only from checked categories. I tried following that didn't work:

$args = array(
'post_type' => 'cpt',
'tax_query' => array(
            array(
               'taxonomy' => $ct_category,
               'field' => 'term_id',
               'terms' => $_POST['taxonomy_category']
                )
              )
           ); 
$loop = new WP_Query( $args );

I can guess that the issue is in 'terms' => $_POST['taxonomy_category']. If name attribute taxonomy_category['.$term->term_id.'] can be displayed as array in 'terms' =>, the issue would be fixed. Spent plenty of times searching google but couldn't find any solution.

Here is the full code

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

If $taxonomy_category is already an array, then:

'terms' => array($taxonomy_category)

should just be:

'terms' => $taxonomy_category

where $taxonomy_category is equal to whatever was submitted from your form as $_POST['taxonomy_category'] or $_GET['taxonomy_category']

5
  • Thanks for your reply Milo. $taxonomy_category isn't an array. Could you please tell me how its possible to make it an array? If I just use 'terms' => $taxonomy_category, I can see text "Array" without any value under "meta_value" in database.
    – Babu
    Mar 6 '16 at 4:27
  • where do you assign the value to $taxonomy_category? parts of your code are missing. when your form is submitted, $_POST['taxonomy_category'] or $_GET['taxonomy_category'] will already be an array and can be passed directly as terms argument.
    – Milo
    Mar 6 '16 at 4:36
  • I am using it in a meta box. Wrongly used $taxonomy_category, so removing it just tried using $_POST['taxonomy_category'] as terms argument as you said, but still it doesn't work. Also nothing saved in database.
    – Babu
    Mar 6 '16 at 5:02
  • 1
    it's impossible to help you further without seeing your full code. nothing in your question or code mentions saving anything in the database.
    – Milo
    Mar 6 '16 at 5:26
  • Added full code. Sorry, I should have added at the time of posting the question.
    – Babu
    Mar 6 '16 at 9:33
0

It is an advanced question that would take me time to debug. However I believe the 'id' value for 'field' is not right. From the documentation,

field (string) - Select taxonomy term by. Possible values are 'term_id', 'name', 'slug' or 'term_taxonomy_id'. Default value is 'term_id'.

I think you want term_id...

Try 2:

Click into your custom taxonomy called 'ct_category' and get the slug for your taxonomy. You do this in the backend probably a submenu of a custom post type.

set up your tax_query

$tax_args = array(
    array('taxonomy' => 'ct_category', 
    'field' => 'slug', 
    'terms' => 'term_slug', 
    'operator' => 'IN')
); 

Set up your args

$args = array('post_type' => 'cpt',
    'post_status' => 'publish', 
    'posts_per_page'=>-1, 
    'tax_query'=>$tax_args); 

$query = new WP_Query($args);

See if you can get that working...then work on getting it to work with term_id.

1
  • Thanks for your reply. tried term_id but didn't work. How can I use name attribute "taxonomy_category['.$term->term_id.']" in "'terms' =>" as array? Probably this would fix the issue.
    – Babu
    Mar 6 '16 at 3:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.