Ondersteuning » Thema en CSS/opmaak » Body class in eigen page template

  • Hallo allen,

    Ik wil een aantal aangepaste page templates maken. Hiervoor heb ik als basis de sidebar template gekopieerd en hernoemt. Het nieuwe page template is ingesteld maar de sidebar verspringt naar beneden ipv naast de content.
    Voorbeeld: http://test.ijmondtrekkers.nl/11-15-jaar/

    Nu ben ik er wel uit dat dit komt door de class ‘singular’ die in de body tag verschijnt. Nu word dit uiteraar gegenereerd door de functie body_class() maar ik snap niet geheel waarom, en belangrijker hoe zorg ik ervoor dat deze, net als bij de sidebar template, niet tevoorschijn komt?

    Kortom kan iemand mij deze class uitleggen?

    Alvast enorm bedankt!
    Paul

6 reacties aan het bekijken - 1 tot 6 (van in totaal 6)
  • Thread starter atacamaweb

    (@atacamaweb)

    Okee, in snap het nog niet waarom de class ‘singular’ word toegevoegd en wat het nut is.
    Wel heb ik uitgevonden dat als ik in functions.php de functie ’twentyeleven_body_classes()’ aanpas het probleem is opgelost.
    Dit door in de 2e IF voor elk template een uitzondering te maken voor dat specifieke template.

    Maar dit lijkt mij een vrij omslachtige oplossing. Wat houd dat singular in en weet iemand hoe het op een mooiere manier voorkomen kan worden?

    Het heeft met de breedte van #primary te maken, deze staat op 100%…dus dan past de sidebar er niet meer naast. Verander die naar bijv. 600px en het zal wel gaan passen.

    Thread starter atacamaweb

    (@atacamaweb)

    Hoi Yasp0, Dank voor het mee denken. Die 100% klopt, maar dat doet het originele sidebar template ook. Alleen zit daar een margin ingesteld die in het speltak template word overruled door ‘.singular #primary {‘.

    (zie bijvoorbeeld pagina http://test.ijmondtrekkers.nl/15-18-jaar/ waar het standaard sidebar template staat ingesteld. Speltak template is (nog) een exacte kopie hiervan overigens.

    Natuurlijk is aanpassen van die CSS een optie, maar ik zou liever voorkomen dat die .singular class erin word gezet. Want het is geen singular layout…

    Hoe roep je de content op van de pagina? Gewoon via de normale WP loop?

    En ‘normaal’ gebruik je page.php als basis voor custom template pagina’s. Ik richt de paga.php (voor een standaard pagina) normaal altijd correct in en vervolgens maak ik de template bestanden.

    Is de sidebar op iedere pagina gelijk?

    Thread starter atacamaweb

    (@atacamaweb)

    Ja, ik heb er nog niets aan veranderd.
    Zoals ik zij het is een exacte kopie van de sidebar-page.php. Het parent thema is twenty-eleven.

    <?php
    /**
     * Template Name: Speltak Template
     * Description: A Page Template that adds a sidebar to pages
     *
     * @package WordPress
     * @subpackage Twenty_Eleven
     * @since Twenty Eleven 1.0
     */
    get_header(); ?>
    		<div id="primary">
    			<div id="content" role="main">
    				<?php the_post(); ?>
    				<?php get_template_part( 'content', 'page' ); ?>
    				<?php comments_template( '', true ); ?>
    			</div><!-- #content -->
    		</div><!-- #primary -->
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    Ik ben er achter dat in de functions.php de functie ’twentyeleven_body_classes()’ aanwezig is. Zie hieronder.
    Als ik hierin de nieuwe template toevoeg werkt het zoals gewenst. Maar ik wil dit sowieso niet in de parent thema doen. En daarnaast lijkt het mij nogal omslagtig als je veel custom page templates hebt (ik wil per speltak een aangepaste om posts met bijbehorende categorie te laten zien).

    function twentyeleven_body_classes( $classes ) {
    
    	if ( ! is_multi_author() ) {
    		$classes[] = 'single-author';
    	}
    
    	if ( is_singular() && ! is_home() && ! is_page_template( 'showcase.php' ) && ! is_page_template( 'sidebar-page.php' ) )
    		$classes[] = 'singular';
    
    	return $classes;
    }
    Thread starter atacamaweb

    (@atacamaweb)

    Ook al is het niet mooi, toch besloten bovenstaande oplossing te maken.
    Alleen loop ik helaas weer tegen een probleem op. Ik wil de functie in de parent theme overschrijven vanuit het child theme.
    De volgende code staat in het childtheme functions.php:

    <?php
    /**
     * This is an override of the parent functions.php to add page templates to the override.
     *
     * Adds two classes to the array of body classes.
     * The first is if the site has only had one author with published posts.
     * The second is if a singular post being displayed
     *
     */
    
    function twentyeleven_body_classes( $classes ) {
    
        if ( ! is_multi_author() ) {
            $classes[] = 'single-author';
        }
    
        if ( is_singular() && ! is_home() && ! is_page_template( 'showcase.php' ) && ! is_page_template( 'sidebar-page.php' ) && ! is_page_template( 'speltak.php' ) )
            $classes[] = 'singular';
    
        return $classes;
    }
    add_filter( 'body_class', 'twentyeleven_body_classes' );
    ?>

    Maar ik krijg helaas een error dat de functie niet aangemaakt mag worden:
    Fatal error: Cannot redeclare twentyeleven_body_classes() (previously declared in /var/www/vhosts/ijmondtrekkers.nl/subdomains/test/httpdocs/wp-content/themes/yt1/functions.php:11) in /var/www/vhosts/ijmondtrekkers.nl/subdomains/test/httpdocs/wp-content/themes/twentyeleven/functions.php on line 591

    Wat doe ik fout in het child theme? Waarschijnlijk een klein foutje maar ik zie hem niet…

6 reacties aan het bekijken - 1 tot 6 (van in totaal 6)
  • Het onderwerp ‘Body class in eigen page template’ is gesloten voor nieuwe reacties.