dmitrylutsenko
Ответы в темах
-
Форум: WooCommerce
Тема: Вывод атрибутов текущей вариацииЭх, как всегда, нашел решение сам…
Я не знаю, почему на этом вукоммерс не реализовали необходимый функционал по выводу характеристик выбранной вариации в таблице, без костылей и синей изоленты никуда…
Инструкция (Я разработал минимально рабочий код, оставляю на Ваше усмотрение оптимизацию кода.).
Инструкция по внедрению в таблицу Детали значения выбранной вариацииИдем в файл \wp-content\themes\{Ваша_тема}\woocommerce\single-product\add-to-cart\variation.php
Инициализируем Все необходимые поля. И скрываем в публичной части сайта. {У меня есть свои кастомные поля, можете посмотреть, как их добавлять в админке, ищите по ключевым словам «woocommerce_wp_text_input» «load_variation_settings_fields» }<script type="text/template" id="tmpl-variation-template"> <div class="woocommerce-variation-description" style="display:none;"> <code>data.variation.variation_description</code> </div> <div class="woocommerce-sleep_place-description" style="display:none;"> <code>data.variation.sleep_place</code> </div> <div class="woocommerce-volume-description" style="display:none;"> <code>data.variation.volume</code> </div> <div class="woocommerce-volume-description" style="display:none;"> <code>data.variation.cloth_type</code> </div> <div class="woocommerce-variation-availability" style="display:none;"> <code>data.variation.availability_html</code> </div> <div class="woocommerce-open_size-availability" style="display:none;"> <code>data.variation.open_size</code> </div> <div class="woocommerce-max_load-availability" style="display:none;"> <code>data.variation.max_load</code> </div> <div class="woocommerce-carcas_material-availability" style="display:none;"> <code>data.variation.carcas_material</code> </div> <div class="woocommerce-prod_time-availability" style="display:none;"> <code>data.variation.prod_time</code> </div> <div class="woocommerce-garantee-availability" style="display:none;"> <code>data.variation.garantee</code> </div> <div class="woocommerce-variation-price"> <code>data.variation.price_html</code> </div> </script>
В functions.php Вашей активной темы прописываете JS, где производится сбор скрытых ранее полей атрибутов, очищение таблицы «Детали» и формирование новой
Код в functions.phpadd_action( 'wp_footer', 'variations_change_javascript', 99999 ); // для фронта function variations_change_javascript() { ?> <script> function empty( mixed_var ) { // Determine whether a variable is empty return ( mixed_var === "" || mixed_var === 0 || mixed_var === "0" || mixed_var === null || mixed_var === false || ( Array.isArray(mixed_var) && mixed_var.length === 0 ) ); } jQuery(document).ready(function($) { var attributes = new Map(); jQuery("#variation_id").bind("change", function() { // console.log("ID: " + jQuery(this).val()); if($(".sku").text().length > 0) { attributes.set('Артикул',$(".sku").text()+""); } if ($(".woocommerce-sleep_place-description").text().length > 0) { attributes.set('Спальное место, мм',$(".woocommerce-sleep_place-description").text()+""); } if ($(".woocommerce-volume-description").text().length > 0) { attributes.set('Объем, кб. м',$(".woocommerce-volume-description").text()+""); } if ($(".woocommerce-open_size-availability").text().length > 0) { attributes.set('Габариты в разложенном виде, мм',$(".woocommerce-open_size-availability").text()+""); } if ($(".woocommerce-max_load-availability").text().length > 0) { attributes.set('Максимальная нагрузка, кг',$(".woocommerce-max_load-availability").text()+""); } if ($(".woocommerce-carcas_material-availability").text().length > 0) { attributes.set('Материалы каркаса',$(".woocommerce-carcas_material-availability").text()+""); } if ($(".woocommerce-prod_time-availability").text().length > 0) { attributes.set('Сроки изготовления',$(".woocommerce-prod_time-availability").text()+""); } if ($(".woocommerce-garantee-availability").text().length > 0) { attributes.set('Гарантия изготовителя',$(".woocommerce-garantee-availability").text()+""); } jQuery(".options-product tbody").empty(); var fields=""; if (attributes.size > 0) { attributes.forEach(function(value, key) { if(value.length > 0){ fields+='<tr>'; fields+='<th class="product-attributes-item__label">'+key+'</th>'; fields+='<td class="product-attributes-item__value">'+value+'</td>'; fields+='</tr>'; jQuery(".options-product tbody").append(fields); fields = ""; } }); } }); }); </script> <?}
Получаете то, что нужно. Код можно доработать, чем я и занимаюсь
Форум: WooCommerce
Тема: Вывод атрибутов текущей вариации<script>
function empty( mixed_var ) { // Determine whether a variable is empty
return ( mixed_var === «» || mixed_var === 0 || mixed_var === «0» || mixed_var === null
|| mixed_var === false || ( Array.isArray(mixed_var) && mixed_var.length === 0 ) );
}jQuery(function() {
jQuery(«select»).change(function() {
var a = jQuery(this).val();
jQuery(«#variation_id»).val(a)
});
jQuery.valHooks.input = {
get: function(a) {
return a.value
},
set: function(a, b) {
var c = a.value;
a.value = b;
«variation_id» == a.id && c !== b && jQuery(a).trigger(«change»)
}
};
jQuery(«#variation_id»).on(«change», function() {
console.log(this.value)var variation_id = this.value;
})
});
</script>
В этом скрипте производится перехват скрытого поля с variation_id.
Я планирую произвести перезапись таблицы «Детали» при помощи JS(AJAX).
Подскажите, пожалуйста, как в functions.php темы прописать Ajax передачу данных через functions.php? :1.Получаю variation_id через JS.- Сделано
2.Готовлю данные для передачи через Ajax: data: {variation_id: variation_id} — Сделано
3.Передаю данные через functions.php(Там все окружение, $product, $post, WC_Product и тп.) — Пока не знаю как
4.В случае успеха произвести перезапись/перегенерацию таблицы Детали с помощью JS (Это не сложно, знаю, умею и практикую)- Ответ изменён 3 года, 8 месяцев назад пользователем dmitrylutsenko.
Форум: WooCommerce
Тема: Вывод атрибутов текущей вариацииЭто вообще хоть как-то реализуется? Или без вариантов?
Форум: Проблемы и решения
Тема: «Мусорные страницы» типа attachmentЧто же, проблему я свою решил. Спасибо за советы.
В общем, может и костыльный способ, но рабочий:
Я добавил проверку в single.php,
при которой уточнялось, принадлежит ли текущая страница какой-нибудь категории,
если нет, то просто выдавал 404 статус и загружал шаблон 404 страницы.Форум: Проблемы и решения
Тема: «Мусорные страницы» типа attachmentВстроил на время в single.php(который используется для вывода этих мусорных страниц) следующий код:
<script>console.log("<?php if(is_archive()){ echo 'Архив';} else echo 'Не архив'?>");</script> <script>console.log("<?php if(is_category()){ echo 'Категория';} else echo 'Не категория'?>");</script> <script>console.log("<?php if(is_comment_feed()){ echo 'comment_feed';} else echo '!comment_feed'?>");</script> <script>console.log("<?php if(is_page()){ echo 'Постоянная страница';} else echo 'Не постоянная страница'?>");</script> <script>console.log("<?php if(is_preview() ){ echo 'Это превью';} else echo 'Не превью'?>");</script> <script>console.log("<?php if(is_feed() ){ echo 'Это новость';} else echo 'Не новость'?>");</script> <script>console.log("<?php if(is_attachment() ){ echo 'Это вложение';} else echo 'Не вложение'?>");</script> <script>console.log("<?php if(is_embed() ){ echo 'запрос для страницы встраивания записи';} else echo 'Не запрос для страницы встраивания записи'?>");</script>
Все по нулям: http://prntscr.com/o3862w
Может, я что-то упускаю.
И именно поэтому не работает редирект с attachment- Ответ изменён 5 лет, 9 месяцев назад пользователем dmitrylutsenko.
Форум: Проблемы и решения
Тема: «Мусорные страницы» типа attachmentПроверил функцией is_attachment() данные ссылки. Это не вложения. Это что-то иное
Форум: Проблемы и решения
Тема: «Мусорные страницы» типа attachmentУважаемый @perdyllo.
Я попробовал и Yoast Seo загодя до написания моего вопроса на этом форуме. К сожалению, данный способ не помог.