Wsparcie » Motywy » Różne background w kategoriach

  • Rozwiązany edrol

    (@edrol)


    Czesc,

    czy jest jakiś sposób na ustawienie różnych grafik jako tło dla kategorii za pomocą stylów css?

    Chodzi o to żeby wybrane prze zemnie kategorie miały inne tło od tego na stronie głównej.

    Stworzyłem szablony dla niektórych kategorii ale ustalony tam background albo jest ładowany na obraz tła (ustawiony w css jako tło dla body) albo ładuje się „pod” nim.
    W pierwszym przypadku gość na stronie musi załadować oba tła aby zobaczyć tło kategorii, a w drugim mimo załadowania obu plików tła, widać tylko tło „główne”.

    Dlatego zwracam się do was z prośbą o doradzenie jak ustawić w pliku style.css różne pliki tła dla wybranych kategorii i całej strony.

    Będę bardzo wdzięczny jeśli ktoś wytłumaczy mi to w zrozumiały sposób 🙂

Viewing 12 replies - 1 through 12 (of 12 total)
  • Moderator amistad18

    (@amistad18)

    ‚Tło w kategoriach’ – zgaduj zgadula co dokładnie masz na myśli. Ogólnie, najłatwiej by było zrobić tak, że jakiś element który ma tło, ma jakieś id czy kasę, będzie dostawał dodatkową klasę związaną z kategorią, np, z jej nazwą czy z ID, i potem będziesz mógł w plikach css kombinować z różnymi tłami – i dziedziczenie załatwi sprawę pobierania dwóch różnych obrazków tła. Lektura która Ci się powinna przydać do tego:

    http://codex.wordpress.org/Function_Reference/is_category
    http://codex.wordpress.org/Function_Reference/single_cat_title

    w pliku style.css mam cos takiego:

    body {
    
    background: #000 url( hxxp://mysite.com/costam.jpg ) top left repeat-x;
    background-attachment: fixed; 
    
    }

    Dzieki temu cala strona ma tło. Ale jak ustawić is_category w css tak aby wybrana kategoria miała inne tło niż hxxp://mysite.com/costam.jpg ?

    Moderator amistad18

    (@amistad18)

    is_category() to jest funkcja WP, napisana w php, i zadziała tylko w kodzie strony, a nie w kodzie css – wstawiasz ją w pliku header.php

    Znalazłem taki i podobne kody jak poniżej, dostosowałem go aby dla kategorii 467 i 900 pokazywane było inne tło na stronie. Jednak gdy wstawiam go na końcu header.php strona zgłasza błąd.

    <?php if (is_category('467')) { ?>
    <?php background url(http://images29.fotosik.pl/15/ed9bba73eb739549.jpg) top left repeat-x; background-attachment: fixed; ?>
    <?php } elseif (is_category('900')) { ?>
    <?php background url(http://images29.fotosik.pl/15/ed9bba73eb739549.jpg) top left repeat-x; background-attachment: fixed; ?>
    <?php } else { ?>
    <?php background url(http://img715.imageshack.us/img715/1065/backgrounduks.jpg) top left repeat-x; background-attachment: fixed; ?>
    <?php } ?>

    Próbowałem jeszcze wstawiać body {

    <?php if (is_category('467')) <strong>body</strong> { ?>
    <?php background url(http://images29.fotosik.pl/15/ed9bba73eb739549.jpg) top left repeat-x; background-attachment: fixed; ?>

    ale to tez nie jest to. Kod ciągle nie działa. Czy mógłbyś mnie poprawić co robię źle?

    Moderator amistad18

    (@amistad18)

    Hmm, nie znasz podstawowej składni php. Podaj adres strony, oraz linki do różnych obrazków tła – już przygotowanych.

    adres strony to hxxp://eziny.net

    a tło dla głównej strony to :

    hxxp://img715.imageshack.us/img715/1065/backgrounduks.jpg

    a dla kategorii:

    hxxp://img218.imageshack.us/img218/8751/thewestbackground1.jpg

    Moderator amistad18

    (@amistad18)

    A więc to będzie mniej więcej taki kod:

    <body id="cos_tam" class="xxx<?php if(is_category(467)){ echo " category_467"; } ?>">

    I w css jeszcze coś takiego:

    .category_467 {
       background: url('img/thewestbackground1.jpg') !important;
    }

    Oczywiście plik tła musi być na tym samym serwerze co strona, najlepiej w katalogu z szablonem, a nie na zewnętrznym serwerze.

    W header.php mam:

    <body <?php body_class() ?> id="bp-default">

    zmieniam to na:

    <body id="bp-default" class="xxx<?php if(is_category(467)){ echo " category_467" } ?>">

    i dostaje taki błąd:

    Parse error: syntax error, unexpected '}', expecting ',' or ';' in .../header.php on line 42

    jaki może być tego powód?

    Możesz też to zrobić w ten sposób (działa na pewno). WordPress będzie za każdym razem sprawdzał czy aktualna strona jest kategorią, jeżeli jest to doda klasę np. ‚category_2’ do znacznika <body>. Tak jak wcześniej było napisane do CSS musisz napisać jeszcze regułę: .category_2 {}

    <?php
    if (is_category()) {
    	$cat_obj = $wp_query->get_queried_object();
        $cat_id = $cat_obj->term_id;
    	$cat = 'category_' . $cat_id;
    }
    ?>
    <body id="bp-default" class="<?php echo $cat; ?>">
    Moderator amistad18

    (@amistad18)

    Mój błąd, nie zauważyłem że zapomniałem ; za echo. Ale to nawet dobrze, gdyż od razu zapoznałem się z funkcją body_class() – jest genialna do tego co potrzebujesz 😉 , więc ją zostaw, dokładnie tak jak było. Wtedy przykładowe klasy jakie ma <body> :
    archive category category-thewestporadniki

    dla linka:
    eziny.net/category/thewest/thewest_poradniki/

    Więc zostaje tylko dopisać dany kod do css, w tym przypadku, zmiana tła dla tej kategorii, to:

    .category-thewestporadniki {
       background: url('img/thewestbackground1.jpg') !important;
    }

    Dzięki chłopaki za pomoc! Oba sposoby działają bardzo dobrze. Zdecydowałem się zastosować do porady amistad18 i oprzeć css na body_class(), ponieważ jest najmniej „inwazyjny”.

    Miałem tylko problem z umiejscowieniem grafiki na background. Z jakiegoś powodu img/thewestbackground1.jpg nie działał. Ale gry wrzuciłem grafikę do głównego katalogu z szablonem tzn. thewestbackground1.jpg działa bez problemu.

    Jednak za szybko pochwaliłem body_class(), ponieważ okazuje się, że występuje problem z tłem w podkategoriach.

Viewing 12 replies - 1 through 12 (of 12 total)
  • The topic ‘Różne background w kategoriach’ is closed to new replies.