Run this from WP CLI to generate sample item code data for all local products. Drop the file in your mu-plugins directory, then run:
dev/docker/wp.sh shell
localdev_populate_itemcodes();
exit();
<?php | |
use Tribe\Project\Post_Meta\Catalog_Integration; | |
use Tribe\Project\Post_Types\Product\Product; | |
use Tribe\Project\Taxonomies\Item_Code\Item_Code; | |
use Tribe\Project\Taxonomies\Spec_Field\Spec_Field; | |
use Tribe\Project\Taxonomies\Warranty\Warranty; | |
use Tribe\Project\Taxonomy_Meta\Spec_Field_Attributes; | |
function localdev_populate_itemcodes() { | |
$fields = [ | |
'height' => 'Height', | |
'width' => 'Width', | |
'depth' => 'Depth', | |
'seatheight' => 'Seat Height', | |
'weight' => 'Product Weight', | |
'steelcasestyle' => 'Steelcase Style', | |
'manufacturerstyle' => 'Manufacturer Style', | |
'leadtime' => 'Lead Time', | |
'warranty' => 'Warranty', | |
'material' => 'Material', | |
'certifications' => 'Certifications', | |
'countryavailability' => 'Country Availability', | |
]; | |
foreach ( $fields as $key => $label ) { | |
if ( ! term_exists( $key, Spec_Field::NAME ) ) { | |
$term = wp_insert_term( $label, Spec_Field::NAME, [ | |
'slug' => $key, | |
] ); | |
update_term_meta( $term['term_id'], Spec_Field_Attributes::GROUPING, Spec_Field_Attributes::INFO ); | |
} | |
} | |
$products_without_item_codes = get_posts( [ | |
'fields' => 'ids', | |
'posts_per_page' => - 1, | |
'post_type' => Product::NAME, | |
'post_status' => 'publish', | |
'tax_query' => [ | |
[ | |
'taxonomy' => Item_Code::NAME, | |
'operator' => 'NOT EXISTS', | |
], | |
], | |
] ); | |
foreach ( [ 'Steelcase Standard', 'Manufacturer' ] as $warranty ) { | |
if ( ! term_exists( $warranty, Warranty::NAME ) ) { | |
wp_insert_term( $warranty, Warranty::NAME ); | |
} | |
} | |
foreach ( $products_without_item_codes as $post_id ) { | |
$title = get_the_title( $post_id ); | |
\WP_CLI::log( 'Generating item code for ' . $title ); | |
$item_code = preg_replace( '/\W/', '_', strtoupper( $title ) ); | |
$term_data = term_exists( $item_code, Item_Code::NAME ); | |
if ( $term_data ) { | |
\WP_CLI::warning( sprintf( 'Item code %s already exists. Skipping...', $item_code ) ); | |
continue; | |
} | |
$term_data = wp_insert_term( $item_code, Item_Code::NAME ); | |
$item_code_id = (int) $term_data['term_id']; | |
if ( ! $item_code_id ) { | |
\WP_CLI::warning( sprintf( 'Unable to create item code %s. Skipping...', $item_code ) ); | |
continue; | |
} | |
wp_set_object_terms( $post_id, [ $item_code_id ], Item_Code::NAME ); | |
$specs = [ | |
'depth' => [ sprintf( '%d in', random_int( 10, 40 ) ) ], | |
'weight' => [ sprintf( '%d lb', random_int( 10, 40 ) ) ], | |
'width' => [ sprintf( '%d in', random_int( 10, 40 ) ) ], | |
'warranty' => [ [ 'Steelcase Standard', 'Manufacturer' ][ random_int( 0, 1 ) ] ], | |
'material' => [ [ 'Plastic', 'Fabric' ][ random_int( 0, 1 ) ] ], | |
'manufacturerstyle' => [ $item_code ], | |
'certifications' => [ [ 'BIFMA - Yes', 'SCS Indoor Advantage Gold' ][ random_int( 0, 1 ) ] ], | |
'countryavailability' => [ [ 'USA', 'CAN', 'MEX' ][ random_int( 0, 2 ) ] ], | |
'color' => [ [ 'Red', 'Green', 'Blue' ][ random_int( 0, 2 ) ] ], | |
'style' => [ [ 'Modern', 'Classic', 'Victorian' ][ random_int( 0, 2 ) ] ], | |
'leadtime' => [ sprintf( '%d weeks delivered', random_int( 2, 10 ) ) ], | |
]; | |
update_term_meta( $item_code_id, Catalog_Integration::SPECS, $specs ); | |
$list_price = random_int( 800, 1500 ); | |
$cost_price = random_int( 200, $list_price ); | |
$price_label = [ 'Retail', 'List' ][ random_int( 0, 1 ) ]; | |
update_term_meta( $item_code_id, Catalog_Integration::LIST_PRICE, ( (string) $list_price ) . '.00' ); | |
update_term_meta( $item_code_id, Catalog_Integration::LIST_PRICE_LABEL, $price_label ); | |
update_term_meta( $item_code_id, Catalog_Integration::COST_PRICE, ( (string) $cost_price ) . '.00' ); | |
} | |
} |