Woocommerce: код для добавления пользовательских тегов alt и title к изображениям продуктов работает, но тормозит страницу администратора продукта

Создавая магазин Woocommerce, я хотел добавить пользовательские теги alt и title к изображениям продуктов на основе названия продукта, тегов и одного атрибута. Я добавил код в дочерний файл functions.php, и он, похоже, сработал - как на фронте, так и в медиа-менеджере я получил нужные мне теги alt и title, все было в порядке.

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

Неустранимая ошибка: вызов функции-члена get_tags() при нулевом значении в functions.php в строке 112

Мой код в дочернем файле functions.php (строка $authortags 112):

// Change images alt and title tag 
add_filter('wp_get_attachment_image_attributes', 'change_attachement_image_attributes', 20, 2);
function change_attachement_image_attributes($attr, $attachment) {
global $post, $product;
if ($post->post_type == 'product') {
    $title = $post->post_title;
    $authortags = strip_tags ($product->get_tags());
    $editor = $product->get_attribute( 'pa_szerkesztette' );

    $attr['alt'] = $title .' '. $authortags .' '. $editor;
    $attr['title'] = $title .' '. $authortags .' '. $editor;
}
return $attr;
}   

То же самое со всеми страницами продукта. Я предполагаю, что проблема заключается в удалении тегов, и я должен найти другой метод, чтобы получить их в коде, но ничего из того, что я пробовал, не сработало (мои знания php довольно ограничены...).

Может ли кто-нибудь помочь мне, что я делаю неправильно, как изменить код, чтобы получить эту работу? Спасибо


person Anna    schedule 16.05.2017    source источник
comment
Я думаю, вы используете $product вместо $post.   -  person inarilo    schedule 16.05.2017
comment
Вызов функции-члена get_tags() для нулевых сигналов о том, что проблема $product не является объектом продукта, а является нулевой переменной. Вы не можете предполагать, что $product всегда глобально установлено. Было бы лучше получить продукт из идентификатора поста. $product = wc_get_product( $post->ID );   -  person helgatheviking    schedule 16.05.2017
comment
Большое спасибо вам обоим, изменили код, как предложил helgateviking, и он работает.   -  person Anna    schedule 16.05.2017
comment
Не могли бы вы отправить, а затем принять новый код в качестве ответа?   -  person helgatheviking    schedule 17.05.2017


Ответы (1)


@helgatheviking Я провел вчера около. 10 минут, пытаясь выяснить, как принять ваше предложение в качестве ответа, пока я не понял, что комментарий технически не является ответом ... учусь использовать stackoverflow.

Вот рабочий код:

// Change images alt and title tag 
add_filter('wp_get_attachment_image_attributes', 'change_attachement_image_attributes', 20, 2);
function change_attachement_image_attributes($attr, $attachment) {
global $post;
$product = wc_get_product( $post->ID );
if ($post->post_type == 'product') {
    $title = $post->post_title;
    $authortags = strip_tags ($product->get_tags());
    $editor = $product->get_attribute( 'pa_szerkesztette' );

    $attr['alt'] = $title .' '. $authortags .' '. $editor;
    $attr['title'] = $title .' '. $authortags .' '. $editor;
    }
    return $attr;
}   
person Anna    schedule 17.05.2017