Support » Theme: Shapla » Creating a New Header for the Home Page

  • Resolved nootkan

    (@nootkan)


    Was hoping you could help me with this. I have created a new header.php file and named it header-home.php. I added my slider php call there and than created a new page.php file (both files are placed inside my child theme folder) with this code to replace the get_header call:

    if(is_page(2)) {
     get_header('home');
    }
    else {
     get_header();
    }

    When I view the homepage in admin mode the url is post=2 so I am assuming that is the post id.
    I only want the slider to show on the home page and no other page or post but it isn’t doing what I want. Should I be adding the new get_header code to another file instead?

    • This topic was modified 3 months, 3 weeks ago by  nootkan.
Viewing 11 replies - 1 through 11 (of 11 total)
  • I thought I’d add that this originated from this blog that I found doing a google search for using different headers for pages.

    @nootkan – try this

    if ( is_front_page() ) :
        get_header( 'home' );
    else:
        get_header();
    endif;

    salsaturation, thanks but that didn’t work either. Here is where I am placing it inside my page.php:

    <?php
    /**
     * The template for displaying all pages.
     *
     * This is the template that displays all pages by default.
     * Please note that this is the WordPress construct of pages
     * and that other 'pages' on your WordPress site may use a
     * different template.
     *
     * @link https://codex.wordpress.org/Template_Hierarchy
     *
     * @package Shapla
     */
    
    if ( is_front_page() ) :
        get_header( 'home' );
    else:
        get_header();
    endif;
    
    	<div id="primary" class="content-area">
    		<main id="main" class="site-main" role="main">

    And here is where I placed the code inside my index.php:

    <?php
    /**
     * The main template file.
     *
     * This is the most generic template file in a WordPress theme
     * and one of the two required files for a theme (the other being style.css).
     * It is used to display a page when nothing more specific matches a query.
     * E.g., it puts together the home page when no home.php file exists.
     *
     * @link https://codex.wordpress.org/Template_Hierarchy
     *
     * @package Shapla
     */
    
    if ( is_front_page() ) :
        get_header( 'homepage' );
    else:
        get_header();
    endif;
    
    	<div id="primary" class="content-area">
    		<main id="main" class="site-main" role="main">

    Neither one works for me. Also I changed the name of the new header.php file to header-homepage.php.

    • This reply was modified 3 months, 3 weeks ago by  nootkan.

    Did you close the php code properly… ie try

    <?php 
    if ( is_front_page() ) :
        get_header( 'home' );
    else:
        get_header();
    endif;
    ?>

    salsaturation, thanks again for your rely. I have tried it as you suggest and still nothing.

    I have only tried it in the index.php and page.php files as I am not sure what other file is required for the front page.

    I just tried my original code from the url I posted previously on the twentysixteen and twentythirteen child themes and it works fine. So I have to assume it is an issue with the shapla theme. Hopefully the developer will be able to help me with this.

    Theme Author Sayful Islam

    (@sayful)

    Hello,

    Shapla theme is extendable using action and filter hook. If you open header.php file, you will fine hook

    do_action( 'shapla_before_content' );

    To add slider for your front page, you can add action hook like following.

    
    add_action( 'shapla_before_content', 'shapla_child_slider_for_front_page' );
    
    function shapla_child_slider_for_front_page(){
    	if ( ! is_front_page() ) {
    		return;
    	}
    	
    	ob_start();
    	include_once 'slider.php';
    	$html = ob_get_contents();
    	ob_end_clean();
    
    	echo $html;
    }

    Replace slider.php with your actual filename and path.

    Hope you will find it useful.
    Thanks,

    Hi thanks for the reply. I added the code you gave me to the header.php file replacing the do action('shapla_before_content');

    I then created a new file named slider.php with my embedded slider shortcode inside and saved both the header.php and slider.php file to my child theme.

    Unfortunately I must be misunderstanding something as now there is a blank page.

    Okay I got the page to show again but the slider isn’t showing. Here is my header.php code from my child theme:

    <body <?php body_class(); ?>>
    <div id="page" class="site">
    	<?php
    	/**
    	 * Functions hooked in to shapla_before_header
    	 */
    	do_action( 'shapla_before_header' ); ?>
    
    	<header id="masthead" class="site-header" role="banner" style="<?php shapla_header_styles(); ?>">
    		<div class="shapla-container">
    			<?php
    			/**
    			 * Functions hooked into shapla_header action
    			 *
    			 * @hooked shapla_skip_links - 0
    			 * @hooked shapla_site_branding - 20
    			 * @hooked shapla_primary_navigation - 30
    			 */
    			do_action( 'shapla_header' ); ?>
    		</div>
    	</header><!-- #masthead -->
    	<?php
    	/**
    	 * Functions hooked in to shapla_before_content
    	 */
    	do_action( 'shapla_before_content' ); ?>
    	
    	<?php add_action( 'shapla_before_content', 'shapla_child_slider_for_front_page' );
    
    function shapla_child_slider_for_front_page(){
    	if ( ! is_front_page() ) {
    		return;
    	}
    	
    	ob_start();
    	include_once 'slider.php';
    	$html = ob_get_contents();
    	ob_end_clean();
    
    	echo $html;
    } ?>
    
    	<div id="content" class="site-content">

    I didn’t realize that you wanted me to add the opening and closing php tags to the code.

    Here is the embedded slider code I need to have work in my header.php file:

    <?php 
        echo do_shortcode("[metaslider id=87]"); 
    ?>

    I currently have the slider code inside a slider.php file also inside my child theme folder.

    Also my child theme isn’t called shapla-child but the name of the website itself. Would that be the problem? The child theme is working for everything else however so I am not sure if that is the problem. Php confuses the hell out me.

    Theme Author Sayful Islam

    (@sayful)

    Hello,

    Do not modify header.php file. Add the sample code at your child theme functions.php file.

    add_action( 'shapla_before_content', 'shapla_child_slider_for_front_page' );
    
    function shapla_child_slider_for_front_page(){
    	if ( ! is_front_page() ) {
    		return;
    	}
    	
    	ob_start();
    	include_once 'slider.php';
    	$html = ob_get_contents();
    	ob_end_clean();
    
    	echo $html;
    }

    You can have a look at
    https://developer.wordpress.org/reference/functions/do_action/
    https://developer.wordpress.org/reference/functions/add_action/
    https://codex.wordpress.org/Plugin_API/Action_Reference

    • This reply was modified 3 months, 2 weeks ago by  Sayful Islam. Reason: Added reference link

    Thanks very much that worked. I’ll look over the links to see if I can understand actions and filters.

Viewing 11 replies - 1 through 11 (of 11 total)
  • You must be logged in to reply to this topic.