Skip to content

Instantly share code, notes, and snippets.

@modemlooper
Created May 4, 2019 17:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save modemlooper/07fbc1050b802a1dada5799ccf6f62f2 to your computer and use it in GitHub Desktop.
Save modemlooper/07fbc1050b802a1dada5799ccf6f62f2 to your computer and use it in GitHub Desktop.
Copy categories to tags then add tags to posts - WordPress
// Lets create our tags. We will use wp_insert_term hooked to init
function emg_add_cat_to_tags() {
// Get all categories
$categories = get_categories( [ 'hide_empty' => 0 ] );
// Probably totally unnecessary, but check for empty $categories
if ( ! $categories ) {
return;
}
// Loop through the categories and create our tags
foreach ( $categories as $category ) {
// First make sure that there is no tag that exist with the same name
if ( term_exists( $category->name, 'post_tag' ) ) {
continue;
}
// Set our arguments for our terms from $category
$args = [
'description' => $category->description,
'parent' => 0, // We can drop this, default is 0
'slug' => $category->slug,
];
wp_insert_term( $category->name, 'post_tag', $args );
}
}
add_action( 'init', 'emg_add_cat_to_tags' );
function emg_add_tags_to_post() {
// Get all our posts
$args = [
'posts_per_page' => -1,
'fields' => 'ids', // Make the query lean
// Add any additional query args here
];
$q = new WP_Query( $args );
if ( ! $q->have_posts() ) {
return;
}
while ( $q->have_posts() ) {
$q->the_post();
// Get all the categories attached to the post
$categories = get_the_category();
if ( ! $categories ) {
continue;
}
// Get the names from the categories into an array
$names = wp_list_pluck( $categories, 'name' );
// Loop through the names and make sure that the post does not already has the tag attached
foreach ( $names as $key => $name ) {
if ( has_tag( $name ) ) {
unset( $names[ $key ] );
}
}
// Make sure we still have a valid $names array
if ( ! $names ) {
continue;
}
// Finally, attach our tags to the posts
wp_set_post_terms(
get_the_ID(), // Post ID
$names, // Array of tag names to attach
'post_tag',
true // Only add the tags, do not override
);
}
wp_reset_postdata();
}
add_action( 'template_redirect', 'emg_add_tags_to_post' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment