Tax Archives – Backfill

/**
 * Run queries for posts and assign our term to them.
 *
 * Conditionally able to run on just one-to-many post types, or all.
 *
 * @since 1.0.0
 *
 * @param mixed $chosen Individual post type to potentially use.
 */
function pluginize_backfill_posts_by_post_type( $chosen = '' ) {

    // We only want to run this if there is a $_GET param of `?fill_posts=true` or `&fill_posts=true`.
    if ( empty( $_GET ) ) {
        return;
    }

    if ( ! isset( $_GET['fill_posts'] ) || 'true' !== $_GET['fill_posts'] ) {
        return;
    }

    if ( ! empty( $chosen ) && is_string( $chosen ) && post_type_exists( $chosen ) ) { // If we are passed a string as a chosen post type and it's valid.
        $post_types = [ $chosen ];
    } elseif ( is_array( $chosen ) ) { // If we are passed an array of post types.
        $post_types = [];
        foreach ( $chosen as $item ) {
            if ( post_type_exists( $item ) ) { // If we have valid post types.
                $post_types[] = $item;
            }
        }
    } else { // Nothing at all passed in, default to all of them.
        $post_types = cptui_get_post_type_slugs();
    }

    $args = [
        'post_type' => $post_types,
        'post_status' => 'publish',
        'fields' => 'ids',
        'posts_per_page' => -1,
    ];
    $backfill = new WP_Query( $args ); // We are only needing our post IDs, from published posts.

    while( $backfill->have_posts() ) {
        $backfill->the_post();
        // We can reuse our function from above!
        pluginize_auto_add_taxonomy_terms_on_publish( get_the_ID() );
    }
}
add_action( 'init', 'pluginize_backfill_posts_by_post_type' );