Поместил бы это в 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) 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' );
Других решений пока нет …