MoyaSystem

もやしです。

BuddyPressでヘッダ画像が勝手に置き換わる件

事象

WordPress + BuddyPressでサイト構築をしているのですが、記事投稿時に写真を添付するとヘッダ画像がその写真に置き換わってしまうという事象が発生しました。どうやらスマホから投稿した場合にのみ発生する模様。このままでは具合がわるいので調査しました。

原因

BuddyPressのfunctions.phpに定義されているbp_dtheme_header_style 関数が原因。
サムネイルが設定されているときに該当記事のページを開くと、ヘッダ画像が置き換わってしまう模様。

<?php
/**
 * The styles for the post thumbnails / custom page headers.
 *
 * Referenced via add_custom_image_header() in bp_dtheme_setup().
 *
 * @global WP_Query $post The current WP_Query object for the current post or page
 * @since BuddyPress (1.2)
 */
function bp_dtheme_header_style() {
	global $post;
	$header_image = '';
	if ( is_singular() && current_theme_supports( 'post-thumbnails' ) && has_post_thumbnail( $post->ID ) ) {
		$image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'post-thumbnail' );
		// $src, $width, $height
		if ( !empty( $image ) && $image[1] >= HEADER_IMAGE_WIDTH )
			$header_image = $image[0]; //ココ!
		else
			$header_image = get_header_image();

	} else {
		$header_image = get_header_image();
	}
?>
	<style type="text/css">
		<?php if ( !empty( $header_image ) ) : ?>
			#header { background-image: url(<?php echo $header_image ?>); }
		<?php endif; ?>
		<?php if ( 'blank' == get_header_textcolor() ) { ?>
		#header h1, #header #desc { display: none; }
		<?php } else { ?>
		#header h1 a, #desc { color:#<?php header_textcolor(); ?>; }
		<?php } ?>
	</style>
<?php
}

解決

ヘッダ画像を変える必要は全くないので、常にget_header_image()の返り値をヘッダにセットするよう、固有テーマのfunctions.phpで関数をオーバーライド。

<?php
function bp_dtheme_header_style() {
	$header_image = get_header_image();
?>
	<style type="text/css">
		<?php if ( !empty( $header_image ) ) : ?>
			#header { background-image: url(<?php echo $header_image ?>); }
		<?php endif; ?>

		<?php if ( 'blank' == get_header_textcolor() ) { ?>
		#header h1, #header #desc { display: none; }
		<?php } else { ?>
		#header h1 a, #desc { color:#<?php header_textcolor(); ?>; }
		<?php } ?>
	</style>
<?php
}
?>

しかしなぜデフォルトでこの仕様なのか?