Natalia_ai
@Natalia_ai
люблю вёрстку

Как переопределить стили родительской темы стилями дочерней темы?

Есть задача подключить стили дочерней темы так, чтобы они переопределяли стили родительской.
Понимаю, что есть гугл и множество информации на эту тему. Смотрю, читаю, пытаюсь применять. Не получается. Поэтому пишу здесь)
Вот так выглядит function.php родительской темы
spoiler
<?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];
}
  • Вопрос задан
  • 428 просмотров
Пригласить эксперта
Ответы на вопрос 1
vova87
@vova87
Разработка сайтов на wordpress
1. Нужно загружать файл стилей дочерней темы после файла стилей родительской, это можно сделать так:
wp_enqueue_style( 'stylesheet-two', get_template_directory_uri() . '/css/child-style.css', array( 'parent-style' ) );


2. Использовать больше селекторов. Например:

body p{color: #fff;}

p{color: #000;}

Цвет будет белый, т.к. body p - имеет больший вес.

3. Использовать !important
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы