__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
<?php
/**
* Traits for handling custom product attributes and their terms.
*/
namespace Automattic\WooCommerce\Admin\API;
defined( 'ABSPATH' ) || exit;
/**
* CustomAttributeTraits class.
*
* @internal
*/
trait CustomAttributeTraits {
/**
* Get a single attribute by its slug.
*
* @internal
* @param string $slug The attribute slug.
* @return WP_Error|object The matching attribute object or WP_Error if not found.
*/
public function get_custom_attribute_by_slug( $slug ) {
$matching_attributes = $this->get_custom_attributes( array( 'slug' => $slug ) );
if ( empty( $matching_attributes ) ) {
return new \WP_Error(
'woocommerce_rest_product_attribute_not_found',
__( 'No product attribute with that slug was found.', 'woocommerce' ),
array( 'status' => 404 )
);
}
foreach ( $matching_attributes as $attribute_key => $attribute_value ) {
return array( $attribute_key => $attribute_value );
}
}
/**
* Query custom attributes by name or slug.
*
* @param string $args Search arguments, either name or slug.
* @return array Matching attributes, formatted for response.
*/
protected function get_custom_attributes( $args ) {
global $wpdb;
$args = wp_parse_args(
$args,
array(
'name' => '',
'slug' => '',
)
);
if ( empty( $args['name'] ) && empty( $args['slug'] ) ) {
return array();
}
$mode = $args['name'] ? 'name' : 'slug';
if ( 'name' === $mode ) {
$name = $args['name'];
// Get as close as we can to matching the name property of custom attributes using SQL.
$like = '%"name";s:%:"%' . $wpdb->esc_like( $name ) . '%"%';
} else {
$slug = sanitize_title_for_query( $args['slug'] );
// Get as close as we can to matching the slug property of custom attributes using SQL.
$like = '%s:' . strlen( $slug ) . ':"' . $slug . '";a:6:{%';
}
// Find all serialized product attributes with names like the search string.
$query_results = $wpdb->get_results(
$wpdb->prepare(
"SELECT meta_value
FROM {$wpdb->postmeta}
WHERE meta_key = '_product_attributes'
AND meta_value LIKE %s
LIMIT 100",
$like
),
ARRAY_A
);
$custom_attributes = array();
foreach ( $query_results as $raw_product_attributes ) {
$meta_attributes = maybe_unserialize( $raw_product_attributes['meta_value'] );
if ( empty( $meta_attributes ) || ! is_array( $meta_attributes ) ) {
continue;
}
foreach ( $meta_attributes as $meta_attribute_key => $meta_attribute_value ) {
$meta_value = array_merge(
array(
'name' => '',
'is_taxonomy' => 0,
),
(array) $meta_attribute_value
);
// Skip non-custom attributes.
if ( ! empty( $meta_value['is_taxonomy'] ) ) {
continue;
}
// Skip custom attributes that didn't match the query.
// (There can be any number of attributes in the meta value).
if ( ( 'name' === $mode ) && ( false === stripos( $meta_value['name'], $name ) ) ) {
continue;
}
if ( ( 'slug' === $mode ) && ( $meta_attribute_key !== $slug ) ) {
continue;
}
// Combine all values when there are multiple matching custom attributes.
if ( isset( $custom_attributes[ $meta_attribute_key ] ) ) {
$custom_attributes[ $meta_attribute_key ]['value'] .= ' ' . WC_DELIMITER . ' ' . $meta_value['value'];
} else {
$custom_attributes[ $meta_attribute_key ] = $meta_attribute_value;
}
}
}
return $custom_attributes;
}
}
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| AI | Folder | 0775 |
|
|
| Reports | Folder | 0775 |
|
|
| Templates | Folder | 0775 |
|
|
| Coupons.php | File | 2.15 KB | 0664 |
|
| CustomAttributeTraits.php | File | 3.4 KB | 0664 |
|
| Customers.php | File | 2.11 KB | 0664 |
|
| Data.php | File | 939 B | 0664 |
|
| DataCountries.php | File | 1.12 KB | 0664 |
|
| DataDownloadIPs.php | File | 4.15 KB | 0664 |
|
| Experiments.php | File | 1.82 KB | 0664 |
|
| Features.php | File | 1.7 KB | 0664 |
|
| Init.php | File | 10.42 KB | 0664 |
|
| LaunchYourStore.php | File | 5.15 KB | 0664 |
|
| Leaderboards.php | File | 18.22 KB | 0664 |
|
| Marketing.php | File | 4.84 KB | 0664 |
|
| MarketingCampaignTypes.php | File | 6.02 KB | 0664 |
|
| MarketingCampaigns.php | File | 9.64 KB | 0664 |
|
| MarketingChannels.php | File | 5.74 KB | 0664 |
|
| MarketingOverview.php | File | 3.36 KB | 0664 |
|
| MarketingRecommendations.php | File | 5.94 KB | 0664 |
|
| MobileAppMagicLink.php | File | 2.1 KB | 0664 |
|
| NoteActions.php | File | 2.39 KB | 0664 |
|
| Notes.php | File | 25.79 KB | 0664 |
|
| Notice.php | File | 2.38 KB | 0664 |
|
| OnboardingFreeExtensions.php | File | 2.58 KB | 0664 |
|
| OnboardingPlugins.php | File | 12.84 KB | 0664 |
|
| OnboardingProductTypes.php | File | 1.8 KB | 0664 |
|
| OnboardingProducts.php | File | 1.94 KB | 0664 |
|
| OnboardingProfile.php | File | 18.38 KB | 0664 |
|
| OnboardingTasks.php | File | 32.02 KB | 0664 |
|
| OnboardingThemes.php | File | 5.49 KB | 0664 |
|
| Options.php | File | 10 KB | 0664 |
|
| Orders.php | File | 10.13 KB | 0664 |
|
| PaymentGatewaySuggestions.php | File | 5.86 KB | 0664 |
|
| Plugins.php | File | 21.22 KB | 0664 |
|
| ProductAttributeTerms.php | File | 4.36 KB | 0664 |
|
| ProductAttributes.php | File | 4.46 KB | 0664 |
|
| ProductCategories.php | File | 458 B | 0664 |
|
| ProductForm.php | File | 3.06 KB | 0664 |
|
| ProductReviews.php | File | 1.3 KB | 0664 |
|
| ProductVariations.php | File | 6.03 KB | 0664 |
|
| Products.php | File | 9.73 KB | 0664 |
|
| ProductsLowInStock.php | File | 17.56 KB | 0664 |
|
| SettingOptions.php | File | 878 B | 0664 |
|
| Settings.php | File | 4.2 KB | 0664 |
|
| ShippingPartnerSuggestions.php | File | 5.74 KB | 0664 |
|
| Taxes.php | File | 4.9 KB | 0664 |
|
| Themes.php | File | 6.12 KB | 0664 |
|