There are times when you need to re-organize how your WordPress post data is saved. In my case, I recently wanted to change some metadata into an actual term relationship for a number of posts. This snippet took all of my `vendor` posts, which had post metadata `vendor_markets` and `vendor_category`, and properly categorized them.
Now, some notes:
- This is definitely rough code, and you’d need to refine for your own purposes.
- This should be run on a specific template page just once.
- BACKUP before you use something like this!
- I’d recommend commenting out parts like `wp_set_post_terms` until you confirm it’s working the way you want it to.
All righty then…
/* * Convert all vendors' post metadata for markets and categories * to taxonomic relationship */ $query = new WP_Query( array( 'post_type' => array('vendor'), 'posts_per_page' => -1, // get all vendors 'orderby' => 'meta_value_num', 'order' => 'DESC', ) ); if ( $query->have_posts() ) { while( $query->have_posts() ) { $query->the_post(); $id = get_the_ID(); $markets = get_post_meta( $id, 'vendor_markets', true ); $category = get_post_meta( $id, 'vendor_category', true ); echo $id . ' ' . get_the_title() . ' ' . implode('|', $markets) . ' ' . implode('|', $category); if( ! empty( $markets ) ) { $markets = array_map( 'intval', $markets ); wp_set_post_terms( $id, $markets, 'market' ); } if( ! empty( $category ) ) { $category = array_map( 'intval', $category ); wp_set_post_terms( $id, $category, 'offering' ); } echo "\n"; } }
Leave a Reply