Различный фон-изображение по категориям
Я пытаюсь поместить разные фоновые изображения тела для каждой категории.
body {
background-color: #000;
background-image: url(img/bg.png);
background-repeat: no-repeat;
background-position: center top;
font-size: 14px; color: #555;
font-family: Arial, Helvetica, Verdana, sans-serif; }
Я хочу только разные background-image: url(img/bg.png);
для каждой категории.
Я нашел один возможный метод. Вот так:
<link rel="stylesheet" href="" type="text/css" media="screen,projection" />
<? php if( is_category(1) ) { ?>
<link rel="stylesheet" href="" type="text/css" media="screen" />
<?php }
elseif ( is_category (2) ) { ?>
<link rel="stylesheet" href="" type="text/css" media="screen" />
<?php }
elseif ( is_category (33) ) { ?>
<link rel="stylesheet" href="" type="text/css" media="screen" /> <?php }
else { ?> <?php } ?>
Тем не менее, я почти уверен, что это не лучший из возможных способов достижения моей цели, потому что:
1) Он ищет всю таблицу стилей 2) Он делает запросы внутри header.php что может быть не лучшим способом, учитывая скорость страницы
Моя идея состоит в том, чтобы создайте различные классы телосложения:
body.apple { code here }
body.area { code here }
body.usa { code here }
body.bolt { code here }
body.jennifer { code here }
...или что-то еще.
Мне просто нужен php для загрузки разных классов тела из одной таблицы стилей для разных категорий.
У кого-нибудь есть хорошее решение?
4 answers
Вы можете сделать это с помощью удобной функции Wordpress body_class()
. В зависимости от того, используется ли и как он используется в вашей теме, возможно, он уже дает вам то, что вам нужно. Вот как это выяснить:
Проверьте источник вашей страницы, чтобы узнать, есть ли у тега <body>
на страницах архива категорий какие-либо классы, содержащие вашу категорию slug: category-apple
, category-area
, category-usa
, и т.д. Обычно они включаются по умолчанию.
Если они есть, вы можете использовать их в качестве селекторов в своем CSS:
body.category-apple { /* code here */ }
и т. д.-
Если нет, добавьте функцию
body_class()
в тег<body>
в вашей теме, возможно, расположенный в header.php . Это работает следующим образом:<body <?php body_class(); ?>>
При необходимости вы можете добавить любой дополнительный класс, который вы хотите, в качестве параметра.
Вот запись в Кодексе Wordpress: http://codex.wordpress.org/Function_Reference/body_class
Это уже встроено: функция body_class()
создает специальные классы для каждой категории:
PHP
<body <?php body_class(); ?>>
Вывод по категории "Дженнифер"
<body class="category-jennifer">
Если ваша тема использует body_class
как и должно быть, тогда у вас уже есть все необходимые классы.
Для категорий у вас должно быть:
- категория
- категория-кошачье имя
- категория-(идентификатор)
- категория-постраничный -(номер страницы)
Если у вас много правил категорий, я бы посоветовал вам условно загружать таблицу стилей только для архивов категорий. Если у вас всего несколько правил, это того не стоит. Просто включите их в основную таблица стилей.
function load_cat_style_wpse_87295() {
if (!is_category()) return false;
wp_register_style( 'catstyle', get_stylesheet_directory().'/path/to/stylesheet', false, null, 'all' );
wp_enqueue_style( 'catstyle' );
}
add_action( 'wp_enqueue_scripts', 'load_cat_style_wpse_87295' );
Как сказано в других ответах здесь, когда вы находитесь на странице категории, функция body_class
уже предоставляет вам класс для текущей категории.
Однако, если вы хотите, чтобы фоновое изображение сохранялось также в сообщениях категории, вы можете использовать код, предоставленный кодексом для функции body_class и фильтра:
// add category nicenames in body class
function category_id_class($classes) {
global $post;
foreach((get_the_category($post->ID)) as $category)
$classes[] = $category->category_nicename;
return $classes;
}
add_filter('body_class', 'category_id_class');