WP-CLI script that checks for duplicate WooCommerce products
Save the script as check_duplicate_products.php in your WordPress root directory.
Run it via WP-CLI with
wp eval-file check_duplicate_products.php
<?php
if ( ! defined( 'WP_CLI' ) || ! WP_CLI ) {
die( 'This script must be run via WP-CLI.' );
}
function check_duplicate_products() {
if ( ! class_exists( 'WooCommerce' ) ) {
WP_CLI::error( 'WooCommerce is not active.' );
return;
}
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids',
);
$products = get_posts( $args );
if ( empty( $products ) ) {
WP_CLI::log( 'No published products found.' );
return;
}
$product_names = array();
foreach ( $products as $product_id ) {
$product_name = get_the_title( $product_id );
if ( ! isset( $product_names[ $product_name ] ) ) {
$product_names[ $product_name ] = array();
}
$product_names[ $product_name ][] = $product_id;
}
$duplicates = array_filter( $product_names, function( $ids ) {
return count( $ids ) > 1;
} );
if ( empty( $duplicates ) ) {
WP_CLI::success( 'No duplicate product names found.' );
return;
}
WP_CLI::log( 'Found duplicate product names:' );
$total_duplicates = 0;
foreach ( $duplicates as $name => $ids ) {
$count = count( $ids );
$total_duplicates += $count - 1;
WP_CLI::log( sprintf( 'Product Name: "%s" (Found %d times)', $name, $count ) );
foreach ( $ids as $index => $id ) {
$permalink = get_permalink( $id );
WP_CLI::log( sprintf( ' - ID: %d, URL: %s', $id, $permalink ) );
}
}
WP_CLI::success( sprintf( 'Completed! Found %d duplicate product name(s) across %d products.', count( $duplicates ), $total_duplicates ) );
}
check_duplicate_products();
?>Last updated
Was this helpful?