Другое фоновое изображение по категориям

Я пытаюсь поместить другое фоновое изображение тела для каждой категории.

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); для каждого catecory.

Я нашел один возможный метод.Так и есть:

<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 для загрузки различных классов тела из единственной таблицы стилей для различных категорий.

У кого-либо есть хорошее решение?

1
23.08.2013, 06:06
4 ответа

Можно сделать это использование удобный Wordpress body_class() функция. В зависимости от того, используется ли, и как это в Вашей теме, это может уже давать Вам, в чем Вы нуждаетесь. Вот то, как узнать:

Проверьте источник своей страницы, чтобы видеть если <body> тег на Ваших страницах архива категории имеет любые классы, содержащие Ваш краткий заголовок категории: 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

4
19.02.2020, 22:42
  • 1
    Thaks @supertrue, это было действительно полезно. Пиво на мне соединяет ;) –  Meigo62 17.02.2013, 22:22

Это уже встроено: функция body_class() создает специальные классы для каждой категории:

PHP

<body <?php body_class(); ?>>

Вывод на категории "jennifer"

<body class="category-jennifer">
2
19.02.2020, 22:42

Если Вы тема используете 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' ); 
1
19.02.2020, 22:42

Как сказано в других ответах здесь, когда Вы находитесь на странице категории, 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');
1
19.02.2020, 22:42

Теги

Похожие вопросы