RewriteEngine on
- Включает вообще редиректор, инициализируется 1 раз за файл.RewriteRule ^.htaccess$ - [F] -
запрещает обращение к итак скрытому файлу (все файлы начинающиеся с точки скрытые) к которому по умолчанию и так нет возможности обратиться, достаточно идиотское мероприятие.RewriteRule ^(.*).html$ index.php?request=$1& [L]
- Все что заканчивается на .html перекинуть как запрос через пхп. ЭТо попытка сделать ЧПУ.(.*)
- все что перед .html обьеденяется в группу и запоминается как переменная.$1
вот тут ....request=$1..
############################################################################
#### Убираем повторяющиеся слеши (/) в URL ####
############################################################################
RewriteCond %{THE_REQUEST} //
RewriteRule .* /$0 [R=301,L]
############################################################################
#### Убираем слеши в конце 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]
# Добавляем слеш в конце.
предлагать только разработку на wordpress и woocommerce?
Желательно с помощью flexbox.
(function() { ... })()
var var_a = 5
(var_a) /* или */ (5) // не является ошибкой, возвращает значение переменной или выражения
function func_b() { }
(func_b) /* или */ (function func_b() { }) // не является ошибкой, возвращает ссылку на функцию
var var_c = { key: "val" }
(var_c) /* или */ ({ key: "val" }) // не является ошибкой, возвращает объект
var var_d = [ "one", "two" ]
(var_d) /* или */ ([ "one", "two" ]) // не является ошибкой, возвращает массив
(func_b)
- это ссылка на функцию func_b
, то значит её можно сразу же вызвать.(var_c)
- это объект, то значит можно сразу же использовать его(var_d)
- это массив, то значит можно сразу же использовать его(func_b)()
или (function func_b() { })()
вызвать функцию(var_c).key
или ({ "key": "val" }).key
использовать объект(var_d)[0]
или ([ "one", "two" ])[0]
использовать массив( )
function func_b() { }()
ошибка "Unexpected token )"{ key: "val" }["key"]
["one", "two"][0]
var a = "test"
alert(a)
a
болтается в глобальной области видимости(function(){
var a = "test"
})()
alert(a) // недоступно, потому что она была локальной переменной внутри анонимной функции
( )
пустые?function() { ... }
нет формальных параметров, значит и вызывать можно без параметров.(function (w, d, $) {
// некоторым нравится сокращать код путём использования коротких имён переменных
w['fizz'] = "buzz" // вот так можно принудительно зарегистрировать
// глобальную переменную fizz
$('body').css({background: 'red'}) // вот так можно работать с jQuery через привычную $
// даже если библиотека была загружена в режиме noСonflict
}(window, document, jQuery))
(function (message1, message2, empty) {
// это и есть проверка на undefined
if (message1 === empty)
alert('message1 is undefined')
else
alert('message1 = ' + message1)
if (message2 === empty)
alert('message2 is undefined')
else
alert('message2 = ' + message2)
})("test") // вызвана только с одним параметром, значит второй по имени message2
// будет пустой, а третий empty специально ввели в качестве образца
// данных с типом "undefined", для служебного использования
<?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; ?>
function cf_search_join( $join ) {
global $wpdb;
if ( is_search() ) {
$join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
}
return $join;
}
add_filter( 'posts_join', 'cf_search_join' );
function cf_search_where( $where ) {
global $pagenow, $wpdb;
if ( is_search() ) {
$where = preg_replace(
"/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
}
return $where;
}
add_filter( 'posts_where', 'cf_search_where' );
function cf_search_distinct( $where ) {
global $wpdb;
if ( is_search() ) {
return "DISTINCT";
}
return $where;
}
add_filter( 'posts_distinct', 'cf_search_distinct' );
When there are multiple posts on a page published under the SAME DAY, the_date() only displays the date for the first post (that is, the first instance of the_date()). To repeat the date for posts published under the same day, you should use the Template Tag the_time() or get_the_date() (since 3.0) with a date-specific format string.
Что имелось в виду?