PHP 8.2.31
Preview: CustomAttributeTraits.php Size: 3.40 KB
/home/nshryvcy/taramarriagebureau.com/wp-content/plugins/woocommerce/src/Admin/API/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;
	}
}

Directory Contents

Dirs: 3 × Files: 45

Name Size Perms Modified Actions
AI DIR
- drwxr-xr-x 2026-03-03 06:25:15
Edit Download
Reports DIR
- drwxr-xr-x 2026-03-03 06:25:15
Edit Download
Templates DIR
- drwxr-xr-x 2026-03-03 06:25:15
Edit Download
2.15 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
3.40 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
2.11 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
939 B lrw-r--r-- 2026-03-03 06:25:15
Edit Download
1.12 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
4.15 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
1.82 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
1.70 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
9.29 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
5.15 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
18.22 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
4.84 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
9.64 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
6.02 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
5.74 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
3.36 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
5.94 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
2.10 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
2.39 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
25.79 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
2.38 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
2.58 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
12.98 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
1.94 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
1.80 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
22.83 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
32.03 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
18.09 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
9.69 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
10.13 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
5.86 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
21.22 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
4.46 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
4.36 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
458 B lrw-r--r-- 2026-03-03 06:25:15
Edit Download
3.06 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
1.30 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
9.73 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
14.08 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
6.03 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
878 B lrw-r--r-- 2026-03-03 06:25:15
Edit Download
4.20 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
5.74 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
4.90 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download
6.12 KB lrw-r--r-- 2026-03-03 06:25:15
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).