Switching logo for specific pages on WordPress sit

2019-08-21 11:41发布

问题:

I'm trying to make it so that specific pages use a different logo in the header. I copied the logo.php file from the Avada theme into my child theme folder (Avada-Child-Theme/templates/logo.php).

I added:

    if (is_page(array (194, 248)))
{
  $standard_logo = 'http://nac.flywheelsites.com/wp-content/uploads/2018/05/broadway-binghamton-logo.png';
}

        if (is_page(array (194, 248)))
{
  $retina_logo = 'http://nac.flywheelsites.com/wp-content/uploads/2018/05/broadway-binghamton-logo.png';
}

So this is the new logo.php file in full:

<?php
/**
 * Logo template.
 *
 * @author     ThemeFusion
 * @copyright  (c) Copyright by ThemeFusion
 * @link       http://theme-fusion.com
 * @package    Avada
 * @subpackage Core
 */

// Do not allow directly accessing this file.
if ( ! defined( 'ABSPATH' ) ) {
    exit( 'Direct script access denied.' );
}
$logo_opening_markup = '<div class="';
$logo_closing_markup = '</div>';
if ( 'v7' === Avada()->settings->get( 'header_layout' ) && ! Avada()->settings->get( 'logo_background' ) ) {
    $logo_opening_markup = '<li class="fusion-middle-logo-menu-logo ';
    $logo_closing_markup = '</li>';
} elseif ( 'v7' === Avada()->settings->get( 'header_layout' ) && Avada()->settings->get( 'logo_background' ) && 'Top' === Avada()->settings->get( 'header_position' ) ) {
    $logo_opening_markup = '<li class="fusion-logo-background fusion-middle-logo-menu-logo"><div class="';
    $logo_closing_markup = '</div></li>';
} elseif ( Avada()->settings->get( 'logo_background' ) && 'v4' !== Avada()->settings->get( 'header_layout' ) && 'v5' !== Avada()->settings->get( 'header_layout' ) && 'Top' === Avada()->settings->get( 'header_position' ) ) {
    $logo_opening_markup = '<div class="fusion-logo-background"><div class="';
    $logo_closing_markup = '</div></div>';
}
?>
<?php if ( '' !== Avada()->settings->get( 'logo', 'url' ) || '' !== Avada()->settings->get( 'logo_retina', 'url' ) ) : ?>
    <?php echo $logo_opening_markup; // WPCS: XSS ok. ?>fusion-logo" data-margin-top="<?php echo esc_attr( Avada()->settings->get( 'logo_margin', 'top' ) ); ?>" data-margin-bottom="<?php echo esc_attr( Avada()->settings->get( 'logo_margin', 'bottom' ) ); ?>" data-margin-left="<?php echo esc_attr( Avada()->settings->get( 'logo_margin', 'left' ) ); ?>" data-margin-right="<?php echo esc_attr( Avada()->settings->get( 'logo_margin', 'right' ) ); ?>">
<?php else : ?>
    <?php echo $logo_opening_markup; // WPCS: XSS ok. ?>fusion-logo" data-margin-top="0px" data-margin-bottom="0px" data-margin-left="0px" data-margin-right="0px">
<?php endif; ?>
<?php
    /**
     * The avada_logo_prepend hook.
     */
    do_action( 'avada_logo_prepend' );

    $logo_anchor_tag_attributes = '';
    $logo_anchor_tag_attributes_array = apply_filters( 'avada_logo_anchor_tag_attributes',
        array(
            'class' => 'fusion-logo-link',
            'href'  => ( $custom_link = Avada()->settings->get( 'logo_custom_link' ) ) ? esc_url( $custom_link ) : esc_url( home_url( '/' ) ),
        )
    );

    foreach ( $logo_anchor_tag_attributes_array as $attribute => $value ) {
        if ( 'href' === $attribute ) {
            $value = esc_url( $value );
        } else {
            $value = esc_attr( $value );
        }

        $logo_anchor_tag_attributes .= ' ' . $attribute . '="' . $value . '" ';
    }

        if (is_page(array (194, 248)))
    {
      $standard_logo = 'http://nac.flywheelsites.com/wp-content/uploads/2018/05/broadway-binghamton-logo.png';
    }

            if (is_page(array (194, 248)))
    {
      $retina_logo = 'http://nac.flywheelsites.com/wp-content/uploads/2018/05/broadway-binghamton-logo.png';
    }

    $logo_alt_attribute = apply_filters( 'avada_logo_alt_tag', get_bloginfo( 'name', 'display' ) . ' ' . __( 'Logo', 'Avada' ) );
    ?>
    <?php if ( ( Avada()->settings->get( 'logo', 'url' ) && '' !== Avada()->settings->get( 'logo', 'url' ) ) || ( Avada()->settings->get( 'logo_retina', 'url' ) && '' !== Avada()->settings->get( 'logo_retina', 'url' ) ) ) : ?>
        <a<?php echo $logo_anchor_tag_attributes; // WPCS: XSS ok. ?>>

            <?php $standard_logo = Avada()->images->get_logo_image_srcset( 'logo', 'logo_retina' ); ?>
            <!-- standard logo -->
            <img src="<?php echo esc_url_raw( $standard_logo['url'] ); ?>" srcset="<?php echo esc_attr( $standard_logo['srcset'] ); ?>" width="<?php echo esc_attr( $standard_logo['width'] ); ?>" height="<?php echo esc_attr( $standard_logo['height'] ); ?>"<?php echo $standard_logo['style']; // WPCS: XSS ok. ?> alt="<?php echo esc_attr( $logo_alt_attribute ); ?>" retina_logo_url="<?php echo esc_url_raw( $standard_logo['is_retina'] ); ?>" class="fusion-standard-logo" />

            <?php
            if ( Avada()->settings->get( 'mobile_logo', 'url' ) && '' !== Avada()->settings->get( 'mobile_logo', 'url' ) ) {
                $mobile_logo = Avada()->images->get_logo_image_srcset( 'mobile_logo', 'mobile_logo_retina' );
            ?>
                <!-- mobile logo -->
                <img src="<?php echo esc_url_raw( $mobile_logo['url'] ); ?>" srcset="<?php echo esc_attr( $mobile_logo['srcset'] ); ?>" width="<?php echo esc_attr( $mobile_logo['width'] ); ?>" height="<?php echo esc_attr( $mobile_logo['height'] ); ?>"<?php echo $mobile_logo['style']; // WPCS: XSS ok. ?> alt="<?php echo esc_attr( $logo_alt_attribute ); ?>" retina_logo_url="<?php echo esc_url_raw( $mobile_logo['is_retina'] ); ?>" class="fusion-mobile-logo" />
            <?php } ?>

            <?php
            if ( Avada()->settings->get( 'sticky_header_logo', 'url' ) && '' !== Avada()->settings->get( 'sticky_header_logo', 'url' ) && ( in_array( Avada()->settings->get( 'header_layout' ), array( 'v1', 'v2', 'v3', 'v6', 'v7' ) ) || ( ( in_array( Avada()->settings->get( 'header_layout' ), array( 'v4', 'v5' ) ) && 'menu_and_logo' === Avada()->settings->get( 'header_sticky_type2_layout' ) ) ) ) ) {
                $sticky_logo = Avada()->images->get_logo_image_srcset( 'sticky_header_logo', 'sticky_header_logo_retina' );
            ?>
                <!-- sticky header logo -->
                <img src="<?php echo esc_url_raw( $sticky_logo['url'] ); ?>" srcset="<?php echo esc_attr( $sticky_logo['srcset'] ); ?>" width="<?php echo esc_attr( $sticky_logo['width'] ); ?>" height="<?php echo esc_attr( $sticky_logo['height'] ); ?>"<?php echo $sticky_logo['style']; // WPCS: XSS ok. ?> alt="<?php echo esc_attr( $logo_alt_attribute ); ?>" retina_logo_url="<?php echo esc_url_raw( $sticky_logo['is_retina'] ); ?>" class="fusion-sticky-logo" />
            <?php } ?>
        </a>
    <?php endif; ?>
    <?php
    /**
     * The avada_logo_append hook.
     *
     * @hooked avada_header_content_3 - 10.
     */
    do_action( 'avada_logo_append' );

    ?>
<?php
echo $logo_closing_markup; // WPCS: XSS ok.

/* Omit closing PHP tag to avoid "Headers already sent" issues. */

I've tried:

$standard_logo[‘url’] = ‘/wp-content/uploads/2018/05/broadway-binghamton-logo.png’;

as well. The current file is applying only to the specified pages, but I see this error at the top of those pages:

Warning: Illegal string offset 'url' in /www/wp-content/themes/Avada-Child-Theme/templates/logo.php on line 73

I can't figure out how to get it to work. Site is http://nac.flywheelsites.com/ and to view, UN: flywheel PW: ideakraft

Under Cities in the main nav, I'm trying to make the logo change for Binghamton.

The image URL is correct.

Am I placing this in the wrong place in the PHP file? I tried a few different places. Please advise. Thanks so much.

回答1:

Don't set it as a string - you were on the right track with the array.

I think you'll have to set both the "url" and the "srcset":

// fetch logo normally
$standard_logo = Avada()->images->get_logo_image_srcset( 'logo', 'logo_retina' ); 

// see what that logo structure is like so you know what to override
// echo "<pre>"; print_r($standard_logo); echo "</pre>";


// if on these pages, override the srcset and url
        if (is_page(array (194, 248)))
        {
          $standard_logo['srcset'] = 'http://nac.flywheelsites.com/wp-content/uploads/2018/05/broadway-binghamton-logo.png';
          $standard_logo['url'] = $standard_logo['srcset'];
          $retina_logo['srcset'] = 'http://nac.flywheelsites.com/wp-content/uploads/2018/05/broadway-binghamton-logo.png';
          $retina_logo['url'] = $retinal_logo['srcset'];
        } 

Otherwise I don't see any issues right away. . . Make sure the IDs in your array are correct. And make sure you put the IF condition after the logo is fetched normally with Avada's functions, or else Avada's function will override your new variables.



回答2:

The answer was to place the custom logos above the image source esc_url_raw() function for each logo type (standard, mobile, etc.)

<?php $standard_logo = Avada()->images->get_logo_image_srcset( 'logo', 'logo_retina' ); ?>
        <!-- custom standard logos -->
        <?php
        //Binghamton
        if (is_page( 194 ))
        {
          $standard_logo['srcset'] = 'http://nac.flywheelsites.com/wp-content/uploads/2018/05/broadway-binghamton-logo.png';
          $standard_logo['url'] = $standard_logo['srcset'];
          $retina_logo['srcset'] = 'http://nac.flywheelsites.com/wp-content/uploads/2018/05/broadway-binghamton-logo-retina.png';
          $retina_logo['url'] = $standard_logo['srcset']; 
        } 
        //Erie
        if (is_page( 248 ))
        {
          $standard_logo['srcset'] = 'http://nac.flywheelsites.com/wp-content/uploads/2018/05/broadway-erie-logo.png';
          $standard_logo['url'] = $standard_logo['srcset'];
          $retina_logo['srcset'] = 'http://nac.flywheelsites.com/wp-content/uploads/2018/05/broadway-erie-logo.png';
          $retina_logo['url'] = $standard_logo['srcset']; 
        } 
        //Scranton
        if (is_page( 250 ))
        {
          $standard_logo['srcset'] = 'http://nac.flywheelsites.com/wp-content/uploads/2018/05/broadway-scranton-logo.png';
          $standard_logo['url'] = $standard_logo['srcset'];
          $retina_logo['srcset'] = 'http://nac.flywheelsites.com/wp-content/uploads/2018/05/broadway-scranton-logo.png';
          $retina_logo['url'] = $standard_logo['srcset']; 
        } 
        ?>
        <!-- standard logo -->
        <img src="<?php echo esc_url_raw( $standard_logo['url'] ); ?>" srcset="<?php echo esc_attr( $standard_logo['srcset'] ); ?>" width="<?php echo esc_attr( $standard_logo['width'] ); ?>" height="<?php echo esc_attr( $standard_logo['height'] ); ?>"<?php echo $standard_logo['style']; // WPCS: XSS ok. ?> alt="<?php echo esc_attr( $logo_alt_attribute ); ?>" retina_logo_url="<?php echo esc_url_raw( $standard_logo['is_retina'] ); ?>" class="fusion-standard-logo" />

Page conditions worked fine, tested by echoing. Just neded to execute custom code before logo images printed.