/**
* Делаем ссылки вида: /%category%/%post_tag%/%postname%/ + настраиваем пагинацию
*/
function flush_rewrite_rules_on_activation() {
flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'flush_rewrite_rules_on_activation' );
function custom_rewrite_tag() {
add_rewrite_tag('%tag%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);
function custom_rewrite_rules() {
add_rewrite_rule('^(news||faq||actions)/page/([0-9]+)/?', 'index.php?category_name=$matches[1]&paged=$matches[2]', 'top');
add_rewrite_rule('^(news||faq||actions)/([^/]*)/page/([0-9]+)/?', 'index.php?category_name=$matches[1]&tag=$matches[2]&paged=$matches[3]', 'top');
add_rewrite_rule('^(news||faq||actions)/([^/]*)/([^/]*)/?', 'index.php?category_name=$matches[1]&tag=$matches[2]&name=$matches[3]', 'top');
}
add_action('init', 'custom_rewrite_rules');
function custom_query_vars($query_vars) {
$query_vars[] = 'tag';
return $query_vars;
}
add_filter('query_vars', 'custom_query_vars');
function custom_parse_request($query) {
if (!empty($query->query_vars['tag']) && !empty($query->query_vars['category_name'])) {
$post_tag = $query->query_vars['tag'];
$category = $query->query_vars['category_name'];
$term = get_term_by('slug', $post_tag, 'post_tag');
if (!$term && $post_tag !== 'page' && $post_tag !== 'all') {
global $wp_query;
$wp_query->set_404();
status_header(404);
get_template_part(404);
exit();
}
$args = array(
'category_name' => $category,
'tag' => $post_tag,
'post_type' => 'post',
'posts_per_page' => 1
);
$posts = get_posts($args);
if (empty($posts) && $post_tag !== 'page' && $post_tag !== 'all') {
global $wp_query;
$wp_query->set_404();
status_header(404);
get_template_part(404);
exit();
}
}
}
add_action('parse_request', 'custom_parse_request', 10, 1);
/**
* Редактируем ссылки на постах
*/
function custom_permalink_structure($permalink, $post, $leavename) {
if (strpos($permalink, '%tag%') === FALSE) return $permalink;
// Получаем теги поста
$tags = get_the_terms($post, 'post_tag');
if (!is_wp_error($tags) && !empty($tags) && is_object($tags[0])) {
$tag_slug = $tags[0]->slug;
} else {
$tag_slug = 'all';
}
$permalink = str_replace('%tag%', $tag_slug, $permalink);
return $permalink;
}
add_filter('post_link', 'custom_permalink_structure', 10, 3);
add_filter('post_type_link', 'custom_permalink_structure', 10, 3);
<section class="">
<div class="container">
<?php
$loop = new WP_Query( array(
'post_type' => 'product',
'posts_per_page' => 2+1,
'orderby' => 'menu_order',
'order' => 'ASC',
));
?>
<div class="woocommerce">
<ul class="products products_archive_grid">
<?
while ( $loop->have_posts() ): $loop->the_post();
$id = get_the_ID();
$short = do_shortcode('[product id="'.$id.'"]');
$short = str_replace(
"<div class=\"woocommerce \"><ul class=\"products products_archive_grid\">",
"",
$short);
$short = substr($short,0,-11);
echo $short;
endwhile;
?>
</ul>
</div>
</div>
</section>
function rstheme_acf_blocks()
{
if ( function_exists('acf_register_block_type') ) {
acf_register_block_type( array(
.
.
.
.
.
'mode' => 'edit'
) );
}
}
add_action('acf/init', 'rstheme_acf_blocks');
( 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>
$(document).ready(function( $ ) {
function timer(element_class){
let timer;
let x = 4;
let defVal = $(element_class).val();
function countdown(){
$(element_class).val('Повторная отправка формы через: ' + x + 'сек.');
x--;
if (x<0){
clearTimeout(timer);
$(element_class).val(defVal);
}
else {
timer = setTimeout(countdown, 1000);
}
}
countdown();
}
document.addEventListener( 'wpcf7submit', function( event ) {
let element_class = '#' + event.detail.id + ' .wpcf7-submit';
timer(element_class);
$(element_class).attr('disabled', 'disabled');
setTimeout(function(){
$(element_class).removeAttr('disabled');
}, 4000);
}, false );
document.addEventListener( 'wpcf7mailsent', function( event ) {
let element_class = '#' + event.detail.id + ' .wpcf7-submit';
$(element_class).remove();
}, false );
});
<li>
<div class="address-field" data-priority="40">
<label for="billing_city" class="">Укажите город:
<span class="woocommerce-input-wrapper">
<input type="text" class="input-text mt-1 m-0" id="demo1" name="billing_city">
</span>
</label>
</div>
<script>
$(document).ready(function() {
var b = $('#billing_city').val();
$('#demo1').attr('value', b);
});
$('#demo1').keyup(function() {
var a = $(this).val();
$('#billing_city').attr('value', a);
});
</script>
</li>
add_filter( 'script_loader_src', '_remove_script_version' );
add_filter( 'style_loader_src', '_remove_script_version' );
function _remove_script_version( $src ){
$parts = explode( '?', $src );
return $parts[0];
}
add_filter( 'script_loader_src', '_remove_script_version' );
add_filter( 'style_loader_src', '_remove_script_version' );
function _remove_script_version( $src ){
$parts = explode( 'ver', $src );
return $parts[0];
}
<?php
$excerpt = strip_tags(get_the_content());
echo preg_replace('/[\s]{2,}/', ' ',mb_substr($excerpt,0,300,'UTF-8'));
echo '<a href="'. get_permalink() . '" class="btn btn-common btn-rm d-block">Подробнее</a>'
?>
<?php
add_action( 'init', 'register_post_types' );
function register_post_types(){
register_post_type('post_type_name', array(
'label' => null,
'labels' => array(
'name' => '____', // основное название для типа записи
'singular_name' => '____', // название для одной записи этого типа
'add_new' => 'Добавить ____', // для добавления новой записи
'add_new_item' => 'Добавление ____', // заголовка у вновь создаваемой записи в админ-панели.
'edit_item' => 'Редактирование ____', // для редактирования типа записи
'new_item' => 'Новое ____', // текст новой записи
'view_item' => 'Смотреть ____', // для просмотра записи этого типа.
'search_items' => 'Искать ____', // для поиска по этим типам записи
'not_found' => 'Не найдено', // если в результате поиска ничего не было найдено
'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине
'parent_item_colon' => '', // для родителей (у древовидных типов)
'menu_name' => '____', // название меню
),
'description' => '',
'public' => true,
'publicly_queryable' => null, // зависит от public
'exclude_from_search' => null, // зависит от public
'show_ui' => null, // зависит от public
'show_in_menu' => null, // показывать ли в меню адмнки
'show_in_admin_bar' => null, // по умолчанию значение show_in_menu
'show_in_nav_menus' => null, // зависит от public
'show_in_rest' => null, // добавить в REST API. C WP 4.7
'rest_base' => null, // $post_type. C WP 4.7
'menu_position' => null,
'menu_icon' => null,
//'capability_type' => 'post',
//'capabilities' => 'post', // массив дополнительных прав для этого типа записи
//'map_meta_cap' => null, // Ставим true чтобы включить дефолтный обработчик специальных прав
'hierarchical' => false,
'supports' => array('title','editor'), // 'title','editor','author','thumbnail','excerpt','trackbacks','custom-fields','comments','revisions','page-attributes','post-formats'
'taxonomies' => array(),
'has_archive' => false,
'rewrite' => true,
'query_var' => true,
) );
}
?>