I want to get the terms object by given posts ids. I don't know much about sql, and this kinda complicated for me. Here is what i tried:

global $wpdb;
$taxonomy = 'category'
$term= $wpdb->prefix.'terms';
$relations= $wpdb->prefix.'term_relationships';
$taxo = $wpdb->prefix.'term_taxonomy';
$sql = "SELECT $term.*, $relations.*, $taxo.* 
            FROM $term
                JOIN $relations 
                    ON $term.term_id = '$taxo.term_id'
                JOIN $taxo 
                    ON $relations.term_taxonomy_id = $taxo.term_taxonomy_id
            WHERE $taxo.taxonomy = '$taxonomy' AND $relations.object_id IN (116,118) 
            GROUP BY $term.term_id";
$values = $wpdb->get_results($sql, ARRAY_A);

Don't know what is wrong. It just don't work.


It is not advised to make use of custom SQL queries if there are functions in Wordpress that already does the job.

To accomplish this, you can simply make use of wp_get_object_terms(). The first parameter $object_ids takes a string or an array of object ID's. In your case, you can make use of an array of your post ID's. This will retrieve all the terms assosiated with the given post/s.

Here is an example

$terms = wp_get_object_terms( array(394,530),  'category' );
if ( ! empty( $terms ) ) {
    if ( ! is_wp_error( $terms ) ) {
        foreach( $terms as $term ) {
            ?><pre><?php var_dump($term); ?></pre><?php 

This will give you the following output

object(stdClass)#494 (10) {
  string(8) "child-01"
  string(7) "child01"
  string(8) "category"
  string(0) ""
  string(3) "raw"
  • Oh yes, i missed this. I thought the function only accept single id. Thanks. – dev-jim Nov 7 '14 at 3:36

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.