WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru
функция не описана

WC_Admin_Duplicate_Product::generate_unique_slug() private WC 3.9.0

Generates a unique slug for a given product. We do this so that we can override the behavior of wp_unique_post_slug(). The normal slug generation will run single select queries on every non-unique slug, resulting in very bad performance.

Это метод класса: WC_Admin_Duplicate_Product{}

Хуков нет.

Возвращает

Null. Ничего.

Использование

// private - только в коде основоного (родительского) класса
$result = $this->generate_unique_slug( $product );
$product(WC_Product) (обязательный)
The product to generate a slug for.

Список изменений

С версии 3.9.0 Введена.

Код WC_Admin_Duplicate_Product::generate_unique_slug() WC 4.5.2

woocommerce/includes/admin/class-wc-admin-duplicate-product.php
<?php
private function generate_unique_slug( $product ) {
	global $wpdb;

	// We want to remove the suffix from the slug so that we can find the maximum suffix using this root slug.
	// This will allow us to find the next-highest suffix that is unique. While this does not support gap
	// filling, this shouldn't matter for our use-case.
	$root_slug = preg_replace( '/-[0-9]+$/', '', $product->get_slug() );

	$results = $wpdb->get_results(
		$wpdb->prepare( "SELECT post_name FROM $wpdb->posts WHERE post_name LIKE %s AND post_type IN ( 'product', 'product_variation' )", $root_slug . '%' )
	);

	// The slug is already unique!
	if ( empty( $results ) ) {
		return;
	}

	// Find the maximum suffix so we can ensure uniqueness.
	$max_suffix = 1;
	foreach ( $results as $result ) {
		// Pull a numerical suffix off the slug after the last hyphen.
		$suffix = intval( substr( $result->post_name, strrpos( $result->post_name, '-' ) + 1 ) );
		if ( $suffix > $max_suffix ) {
			$max_suffix = $suffix;
		}
	}

	$product->set_slug( $root_slug . '-' . ( $max_suffix + 1 ) );
}