<?php
// подключение меню
if (function_exists('add_theme_support')) {
add_theme_support('menus');
add_theme_support('post-thumbnails');
}
// подключение меню
add_action('after_setup_theme', function(){
register_nav_menus( array(
'main_menu' => 'Основное меню',
'footer_menu' => 'Меню в подвале',
) );
});
//add_image_size( 'petrovich-thumbnail', 180, 100, true );
define('D35_ASSETS_URI', get_template_directory_uri().'/assets');
define('D35_CLASSES_DIR', get_template_directory().'/settings/classes/');
require_once D35_CLASSES_DIR.'Function.php';
require_once D35_CLASSES_DIR.'AdminClass.php';
require_once D35_CLASSES_DIR.'ActionClass.php';
require_once D35_CLASSES_DIR.'WorksClass.php';
require_once D35_CLASSES_DIR.'WorksMetaClass.php';
require_once D35_CLASSES_DIR.'BuildingClass.php';
require_once D35_CLASSES_DIR.'BuildingMetaClass.php';
require_once D35_CLASSES_DIR.'ReviewsClass.php';
require_once D35_CLASSES_DIR.'AkciiClass.php';
require_once D35_CLASSES_DIR.'ServicesClass.php';
require_once D35_CLASSES_DIR.'MaterialsClass.php';
//require_once D35_CLASSES_DIR.'Slider/Slider.php';
new \action\ActionClass();
new \administration\AdminClass();
new \building\BuildingClass();
new \building\BuildingMetaClass();
new \building\WorksClass();
new \building\WorksMetaClass();
new ReviewsClass();
new AkciiClass();
new MaterialsClass();
new ServicesClass();
add_action('template_redirect', 'template_redirect_attachment');
function template_redirect_attachment() {
// global $post;
if (is_attachment()) {
header('Location: https://sk35.ru');
}
}
/* Отключаем админ панель для всех, кроме администраторов. */
if (!current_user_can('administrator')):
show_admin_bar(false);
endif;
/**
* Add a sidebar.
*/
function register_my_widgets(){
register_sidebar( array(
'name' => 'right',
'id' => 'right-sidebar',
'description' => 'Выводиться как боковая панель только на страницах карточки сайта.',
'before_widget' => '<div class="right-widget-block">',
'after_widget' => '</div>',
'before_title' => '<h2 class="widget-title">',
'after_title' => '</h2>',
) );
}
add_action( 'widgets_init', 'register_my_widgets' );
flush_rewrite_rules( false );
/* регистрация левого сайдбара */
register_sidebar(
array(
'id' => 'left-bar35', // уникальный id для сайта, назначается правому сайдбару
'name' => 'левый сайт бар для дом 35', // название сайдбара, которое будет отображаться в админке
'description' => 'Перетяните виджеты, чтобы добавить их в сайдбар.', // описание выводимое в админке для сайдбара
'before_widget' => '<div class="bar35">', // по умолчанию виджеты выводятся <li>-списком
'after_widget' => '</div>', // в этой и предыдущей строке мы задали контейнер в котором будет размещен сайдбар
'before_title' => '<h3 class="bar35">', // если оставить пустым, будет выводиться в <h2>
'after_title' => '</h3>'
)
);
add_action('init', 'register_post_types');
function register_post_types(){
register_post_type('canalization', array(
'label' => null,
'labels' => array(
'name' => 'Канализация', // основное название для типа записи
'all_items' => 'Товары',
'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,
'exclude_from_search' => null,
'show_ui' => null,
'show_in_menu' => true, // показывать ли в меню адмнки
'show_in_admin_bar' => true, // по умолчанию значение show_in_menu
'show_in_nav_menus' => null,
'show_in_rest' => true, // добавить в REST API. C WP 4.7
'rest_base' => true, // $post_type. C WP 4.7
'menu_position' => 2,
'menu_icon' => 'dashicons-filter',
//'capability_type' => 'post',
//'capabilities' => 'post', // массив дополнительных прав для этого типа записи
//'map_meta_cap' => null, // Ставим true чтобы включить дефолтный обработчик специальных прав
'hierarchical' => true,
'supports' => array('title','editor','thumbnail',), // 'title','editor','author','thumbnail','excerpt','trackbacks','custom-fields','comments','revisions','page-attributes','post-formats'
'taxonomies' => array('post_tag','category'),
'has_archive' => true,
'rewrite' => true,
'query_var' => true,
) );
}
class trueTaxonomyMetaBox {
private $opt;
private $prefix;
function __construct( $option ) {
$this->opt = (object) $option;
$this->prefix = $this->opt->id .'_'; // префикс настроек
foreach( $this->opt->taxonomy as $taxonomy ){
add_action( $taxonomy . '_edit_form_fields', array( &$this, 'fill'), 10, 2 ); // хук добавления полей
}
// установим таблицу в $wpdb, если её нет
global $wpdb;
if( ! isset( $wpdb->termmeta ) ) $wpdb->termmeta = $wpdb->prefix .'termmeta';
add_action('edit_term', array( &$this, 'save'), 10, 1 ); // хук сохранения значений полей
}
function fill( $term, $taxonomy ){
foreach( $this->opt->args as $param ){
$def = array('id'=>'', 'title'=>'', 'type'=>'', 'desc'=>'', 'std'=>'', 'args'=>array() );
$param = (object) array_merge( $def, $param );
$meta_key = $this->prefix . $param->id;
$meta_value = get_metadata('term', $term->term_id, $meta_key, true ) ?: $param->std;
echo '<tr class ="form-field">';
echo '<th scope="row"><label for="'. $meta_key .'">'. $param->title .'</label></th>';
echo '<td>';
// select
if( $param->type == 'wp_editor' ){
wp_editor( $meta_value, $meta_key, array(
'wpautop' => 1,
'media_buttons' => false,
'textarea_name' => $meta_key, //нужно указывать!
'textarea_rows' => 10,
//'tabindex' => null,
//'editor_css' => '',
//'editor_class' => '',
'teeny' => 0,
'dfw' => 0,
'tinymce' => 1,
'quicktags' => 1,
//'drag_drop_upload' => false
) );
}
// text
else{
echo '<input name="'. $meta_key .'" type="'. $param->type .'" id="'. $meta_key .'" value="'. $meta_value .'" class="regular-text">';
if( $param->desc ) echo '<p class="description">' . $param->desc . '</p>';
}
echo '</td>';
echo '</tr>';
}
}
function save( $term_id ){
foreach( $this->opt->args as $field ){
$meta_key = $this->prefix . $field['id'];
if( ! isset($_POST[ $meta_key ]) ) continue;
if( $meta_value = trim($_POST[ $meta_key ]) ){
update_metadata('term', $term_id, $meta_key, $meta_value, '');
}
else {
delete_metadata('term', $term_id, $meta_key, '', false );
}
}
}
}
add_action('init', 'register_additional_term_fields');
function register_additional_term_fields(){
new trueTaxonomyMetaBox( array(
'id' => 'txseo', // id играет роль префикса названий полей
'taxonomy' => array('category','karkasnye-doma-cat','post_tag','srub-iz-brusa-cat','doma-iz-brusa-cat'), // названия таксономий, для которых нужно добавить ниже перечисленные поля
'args' => array(
array(
'id' => 'seo_title', // атрибуты name и id без префикса, получится "txseo_seo_title"
'title' => 'SEO Заголовок',
'type' => 'text',
'desc' => 'Новый SEO title.',
'std' => '', // по умолчанию
),
)
) );
}
//apply_filters( 'wp_title', $title, $sep, $seplocation );
add_filter('aioseop_title', 'add_taxseo_wp_title', 5, 3);
function add_taxseo_wp_title( $title, $sep, $seplocation ){
if( ! is_tax() && ! is_category() && ! is_tag() ) return $title; // выходим если не таксы
$term = get_queried_object();
$title = get_metadata('term', $term->term_id, 'txseo_seo_title', 1 );
return esc_html( $title );
}
add_filter('excerpt_more', 'new_excerpt_more');
function new_excerpt_more($more) {
global $post;
return ' <a style="color:#39a925;" href="'. get_permalink($post->ID) . '">Читать дальше...</a>';
}
function wp_corenavi() {
global $wp_query;
$pages = '';
$max = $wp_query->max_num_pages;
if (!$current = get_query_var('paged')) $current = 1;
$a['base'] = str_replace(999999999, '%#%', get_pagenum_link(999999999));
$a['total'] = $max;
$a['current'] = $current;
$total = 1; //1 - выводить текст "Страница N из N", 0 - не выводить
$a['mid_size'] = 3; //сколько ссылок показывать слева и справа от текущей
$a['end_size'] = 1; //сколько ссылок показывать в начале и в конце
$a['prev_text'] = '«'; //текст ссылки "Предыдущая страница"
$a['next_text'] = '»'; //текст ссылки "Следующая страница"
if ($max > 1) echo '<div class="navigation">';
if ($total == 1 && $max > 1) $pages = '<span class="pages">Страница ' . $current . ' из ' . $max . '</span>'."\r\n";
echo $pages . paginate_links($a);
if ($max > 1) echo '</div>';
}
function remove_version_data( $src ){
$links = explode( '?ver', $src );
return $links [0];
}