$tax = 'pa_заданный_вами_слаг_атрибута'
$pa_args = get_terms( $tax, array(
'hide_empty' => false,
)
);
$pa_args = array();
$attribute_taxonomies = wc_get_attribute_taxonomies();
if ( 0 !== count( $attribute_taxonomies ) ) {
foreach ( $attribute_taxonomies as $one_tax ) {
$pa_args[] = get_terms( $one_tax, array(
'hide_empty' => false,
) );
}
}
<?php $product->list_attributes(); ?>
используется метот list_attributes(); Можно на этом остановиться и в своем шаблоне написать global $product;
$product->list_attributes();
public function list_attributes() {
wc_get_template( 'single-product/product-attributes.php', array(
'product' => $this
) );
}
$attributes = $product->get_attributes();
.........
<?php foreach ( $attributes as $attribute ) :
if ( empty( $attribute['is_visible'] ) || ( $attribute['is_taxonomy'] && ! taxonomy_exists( $attribute['name'] ) ) ) {
continue;
} else {
$has_row = true;
}
?>
<tr class="<?php if ( ( $alt = $alt * -1 ) == 1 ) echo 'alt'; ?>">
<th><?php echo wc_attribute_label( $attribute['name'] ); ?></th>
<td><?php
if ( $attribute['is_taxonomy'] ) {
$values = wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'names' ) );
echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
} else {
// Convert pipes to commas and display values
$values = array_map( 'trim', explode( WC_DELIMITER, $attribute['value'] ) );
echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
}
?></td>
</tr>
<?php endforeach; ?>
#container {
box-sizing: border-box;
display: flex;
flex-wrap: nowrap;
width: 100%;
}
#container > div {
flex-basis: 100%;
}
#container > div:nth-child(1) {
flex-shrink: 4;
}
#container > div:nth-child(2) {
flex-shrink: 3;
}
#container > div:nth-child(3) {
flex-shrink: 2;
}
add_action('after_setup_theme', 'remove_zoom_theme_support', 100);
function remove_zoom_theme_support() {
remove_theme_support('wc-product-gallery-zoom');
}
<?php
namespace MySpace;
class DateTime {...}
<?php
...
...
require_once 'app/MySpace/DateTime.php';
// если мы хотим создать объект СВОЕГО КЛАССА:
$myDateTime = new \MySpace\DateTime();
//Или так:
use \MySpace\DateTime;
$myDateTime2 = new DateTime();
// а вот если хотим использовать встроенный класс DateTime в данной ситуации:
$intDateTime = new \DateTime();
$file = file_get_contents('../test.html');
libxml_use_internal_errors(TRUE);
$node = new DOMDocument();
$text = $node->loadHTML('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . $file);
$id = $node->getElementById('firstElement');
$html = $node->saveHTML($id);
$file = file_get_contents('./какой-тоФайл.html');
preg_replace('/(\<[\s\S]*?myId[\s\S]*?\>)/', '\\1 $html', $file);
mask: radial-gradient(320px 320px at var(--x) var(--y), black 1%, transparent 40%);
select * from b_event order by id desc
############################################################################
#### Убираем слеши в конце URL для статических файлов (содержит точку) ####
############################################################################
RewriteCond %{REQUEST_URI} \..+$
# Если файл содержит точку.
RewriteCond %{REQUEST_FILENAME} !-d
# И это не директория.
RewriteCond %{REQUEST_FILENAME} -f
# Является файлом.
RewriteCond %{REQUEST_URI} ^(.+)/$
# И в конце URL есть слеш.
RewriteRule ^(.+)/$ /$1 [R=301,L]
# Исключить слеш.
############################################################################
#### Добавляем слеш(/), если его нет, и это не файл. ####
############################################################################
RewriteCond %{REQUEST_URI} !(.*)/$
# Если слеша в конце нет.
RewriteCond %{REQUEST_FILENAME} !-f
# Не является файлом.
RewriteCond %{REQUEST_URI} !\..+$
# В URL нет точки (файл).
RewriteRule ^(.*)$ $1/ [L,R=301]
# Добавляем слеш в конце.
<div class="logo-up"><a href="<?=SITE_DIR?>"><img src="<?=SITE_TEMPLATE_PATH?>/images/logo-up.png" alt="" /></a></div>
<?php
$curPage = $APPLICATION->GetCurPage(true);
if (
$curPage == SITE_DIR."index.php"
){?>
<div class="logo-up"><img src="<?=SITE_TEMPLATE_PATH?>/images/logo-up.png" alt="" /></div>
<?}else{?>
<div class="logo-up"><a href="<?=SITE_DIR?>"><img src="<?=SITE_TEMPLATE_PATH?>/images/logo-up.png" alt="" /></a></div>
<?}?>
@hooked woocommerce_template_single_title - 5
* @hooked woocommerce_template_single_price - 10
* @hooked woocommerce_template_single_excerpt - 20
* @hooked woocommerce_template_single_add_to_cart - 30
* @hooked woocommerce_template_single_meta - 40
* @hooked woocommerce_template_single_sharing - 50
*тут перечисляем все строки с методом remove_action:
remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_title', 5);
remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10);
... и т.д.
*Теперь вызываем те же действия по хуку woocommerce_single_product_summary, но в нужной нам последовательности:
add_action('woocommerce_single_product_summary', 'woocommerce_template_single_title', 5);
add_action('woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 10);
add_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 15);
... и т.д.
( function( blocks, element, blockEditor ) {
let el = element.createElement;
let InnerBlocks = blockEditor.InnerBlocks;
blocks.registerBlockType( 'gutenberg-custom-block/section', {
title: 'Section',
description: 'section description',
category: 'layout',
keywords: 'section',
icon: {
background: '#7e70af',
foreground: '#fff',
src: 'book-alt'
},
edit: function( props ) {
return el(
'section',
{ className: props.className},
el( InnerBlocks )
);
},
save: function( props ) {
return el(
'section',
{ className: props.className },
el( InnerBlocks.Content )
);
},
} );
} (
window.wp.blocks,
window.wp.element,
window.wp.blockEditor,
) );
<section class="wp-block-gutenberg-custom-block-section">
<!-- ТУТ ВЛОЖЕННЫЕ БЛОКИ -->
</section>
fputcsv($fp, $fields, ';');