Как отобразить пользовательский атрибут WordPress WooCommerce в шаблонах / функциях?

Поместил бы это в WP Stack Exchange, но часто говорят, что поскольку он имеет PHP, он должен быть в SO, поэтому никогда не знаешь, где лучше. Может двигаться, если это более уместно.

Чтобы отобразить пользовательский атрибут продукта woocommerce, который называется, например, «Fabrics», вы могли сделать следующее.

$fabric_values = get_the_terms( $product->id, ‘pa_fabrics’);

foreach ( $fabric_values as $fabric_value ) {
echo $fabric_value->name;
}

Однако есть ли более короткий путь, так как мы будем использовать много атрибутов в шаблонах php.

Например, есть ли способ просто сделать «echo get_the_terms ($ product-> id,‘ pa_fabrics ’);»;

Или есть какая-то отдельная функция, которую можно добавить на их сайт, чтобы затем можно было отобразить любой атрибут продукта, такой же короткой строкой, как выше, как вы можете использовать «Расширенные пользовательские поля» с сайтами, не относящимися к WooCommerce?

ОБНОВИТЬ

Найденный эта тема на SO, который предлагает способ создания единого короткого кода, чтобы относительно легко получить данные. Хотя это, безусловно, вариант, хотелось бы посмотреть, есть ли какой-нибудь очиститель, построенный такими способами:

echo get_the_terms( $product->id, 'pa_fabrics');

или же

echo $product->get_attributes('pa_fabrics');

Последний вариант кажется самым чистым и идеальным, но приводит к ошибке: «Неустранимая ошибка: ошибка Uncaught: вызов функции-члена get_attributes () для null in (мой файл functions.php, в который был добавлен код)».

1

Решение

Ответ на ваш вопрос — это зависит. Подумайте на минуту, насколько гибким вам это нужно.

Давайте начнем с рассмотрения того, что не так с двумя предлагаемыми примерами.

1) echo get_the_terms( . . .

При использовании функции важно знать тип возвращаемого значения. get_the_terms() вернет массив в случае успеха. Вам нужно что-то сделать с этим массивом, чтобы отобразить его.

https://developer.wordpress.org/reference/functions/get_the_terms/

2) echo $product->get_attributes(...

Вы идете по правильному пути 🙂 Ошибка, которую вы видите, говорит вам, что $product это не то, что вы ожидаете. get_attributes() это метод WC_Product учебный класс. Вам нужно иметь экземпляр этого класса, чтобы использовать его.

Одним из способов получить продукт будет использовать wc_get_product(),

$product = wc_get_product();

Теперь вторая проблема у вас есть с самим методом. get_attributes(), лайк get_the_terms(), вернет массив. Тогда вы несете ответственность за отображение этих данных.

Вместо этого я считаю, что вы ищете get_attribute(), Этот метод принимает имя атрибута в качестве единственного аргумента и возвращает строку значений атрибута.

Пример:

// Get a product instance. I could pass in an ID here.
// I'm leaving empty to get the current product.
$product = wc_get_product();

// Output fabrics in a list separated by commas.
echo $product->get_attribute( 'pa_fabrics' );

// Now that I have $product, I could output other attributes as well.
echo $product->get_attribute( 'pa_colors' );
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector