如何在Astra主题的每个页面上有不同的网站标识徽标

时间:2019-08-01 作者:ClubShrimp

原标题-此处为Noob。想知道如何利用Astra主题功能/过滤器在每个页面上拥有不同的站点标识徽标

函数位于第1471行here (astra\\u replace\\u header\\u徽标)。

function astra_replace_header_logo( $image, $attachment_id, $size, $icon ) {
        $custom_logo_id = get_theme_mod( \'custom_logo\' );
        if ( ! is_customize_preview() && $custom_logo_id == $attachment_id && \'full\' == $size ) {
            $data = wp_get_attachment_image_src( $attachment_id, \'ast-logo-size\' );
            if ( false != $data ) {
                $image = $data;
            }
        }
        return apply_filters( \'astra_replace_header_logo\', $image );
    }
我知道我应该在函数中使用条件语句编写函数。我的孩子主题的php文件,但除此之外,我需要一些指导。我用过astra_has_custom_logo 在禁用某些页面的徽标之前,我使用了is_page() 在这种情况下(对于if elses),这起到了作用。

1 个回复
SO网友:Antti Koskinen

这里有几个示例,介绍如何确定您在过滤器中的哪个页面,以及如何基于它返回不同的数据。

在这些示例中,我使用apply_filter() 链接到的代码的一部分,用于将自定义代码挂接到主题代码。自定义函数从接收变量apply_filter() 作为参数。

自定义函数应返回一个具有匹配类型和格式的值作为第一个参数。

在我的示例中,选项1使用页面和徽标的硬编码数组(带有图像id和图像源数组示例)。选项2假设特定于页面的徽标保存为页面post\\u meta中的整数。如果页面匹配且找到数据,则custom函数将返回自定义图像数据。该函数将第一个参数作为回退/默认值返回,表示未更改任何内容。

function my_prefix_filter_astra_replace_header_logo( $image ) {

  // option 1 - logo from hard coded value
  global $post;

  $logos_for_pages = array(
    \'page-a\' => 123,
    \'page-b\' => array( // using wp_get_attachment_image_src() return format
      \'/wp-content/themes/my-theme/logos/logo-b.png\', // url
      100, // width
      30, // height
      false // is_intermediate
    ),
  );

  if ( isset( $logos_for_pages[$post->post_name] ) ) {
    if ( is_int( $logos_for_pages[$post->post_name] ) ) {
      $replace_logo = wp_get_attachment_image_src( $logos_for_pages[$post->post_name], \'ast-logo-size\' );
      if ( false !== $replace_logo ) {
        return $replace_logo;
      }
    } else {
      return $logos_for_pages[$post->post_name];
    }    
  }

  // option 2 - logo from post meta
  global $post;

  $logos_for_pages = array(
    \'page-a\',
    \'page-b\'
  );

  foreach ( $logos_for_pages as $page_name ) {
    if ( is_page( $page_name ) ) {
      $logo_id = get_post_meta( $post->ID, \'meta_key_for_page_specific_logo\', true );      
      if ( $logo_id ) {
        $replace_logo = wp_get_attachment_image_src( $logo_id, \'ast-logo-size\' );
        if ( false !== $replace_logo ) {
          return $replace_logo;
        }
      }
    }
  }

  return $image;
}
add_filter( \'astra_replace_header_logo\', \'my_prefix_filter_astra_replace_header_logo\' );

相关推荐

主题定制--当使用php变量时,如何在外部存储javascript?

EDIT: Complete re-write在过去的几周里,我一直在为我的主题开发一个自定义扩展。这是我第一次用Wordpress“开发”。所有的工作都很好,我对结果的功能很满意,尽管它需要一些整理。我希望将我的js函数移到一个外部文件-自定义。js。原始格式:main-block.php$custom1 = $custom_meta[\'custom1\']; <form name=\"customForm\"> Validatio