您的代码的问题是很难阅读,并且您无法清楚地看到真正的目标是什么。始终从所需的最小结果开始,然后使其更加灵活,但要将其逻辑分开。
你只需要一个<div class="entry-content">
, 也许有一个style
属性因此,首先:
<div class="entry-content" <?php echo $style; ?>>
现在需要一个变量
$style
这可能包含一些内容。按默认值将其设置为空字符串:
$style = \'\';
现在需要逻辑来填充该变量。再一次
don’t repeat yourself. 您呼叫的唯一变化是
wp_get_attachment_image_src()
是size参数,请将其分离出来。还要确保
your URL doesn’t contain dangerous code, use esc_url()
.
if ( has_post_thumbnail() ) {
$size = wpmd_is_notphone() ? array ( 800, 300 ) : array ( 500, 200 );
$thumb = wp_get_attachment_image_src( get_post_thumbnail_id(), $size, TRUE, \'\' );
if ( $thumb )
$url = esc_url( $thumb[ 0 ] );
if ( \'\' !== $url )
$style = " style=\'background-image:$url\'";
}
现在,您甚至可以进一步将该逻辑移到函数中,并将该函数移到主题的
functions.php
. 这将保持模板干净,您可以在其他地方重用该函数。
这样的函数可以如下所示:
/**
* Get a style attribute with a background image URL
*
* @param array $default The default size
* @param array $phone The size for phones
* @return string
*/
function wpse_172203_get_thumb_attribute( $default = array ( 800, 300 ), $phone = array ( 500, 200 ) ) {
if ( ! has_post_thumbnail() )
return \'\';
$size = wpmd_is_notphone() ? $default : $phone;
$thumb_id = get_post_thumbnail_id();
$thumb = wp_get_attachment_image_src( $thumb_id, $size, TRUE, \'\' );
if ( ! $thumb )
return \'\';
$url = esc_url( $thumb[ 0 ] );
if ( \'\' === $url )
return \'\';
return " style=\'background-image:url($url)\'";
}
在模板中,您现在只需要:
<div class="entry-content" <?php echo wpse_172203_get_thumb_attribute(); ?>>
<div class="article-body clearfix">
<?php the_content( __( "Continue...", "chrissy" ) ); ?>
</div>
</div>
可以在具有不同参数的其他位置重用该函数,例如在循环中:
<div class="excerpt" <?php
echo wpse_172203_get_thumb_attribute(
array ( 500, 250 ),
array ( 250, 125 )
); ?>>
<?php the_excerpt(); ?>
</div>
不要忘记发送HTTP
Vary
标题:
header( \'Vary: User-Agent\' );
否则,输出将缓存在代理服务器中,您的内容将发送到错误的收件人。通常,您不应该尝试根据PHP检测用户代理。这个
Vary
收割台将
break caching for all browsers, 因此,最终,你的网站现在比没有“优化”的图像要慢得多。为此,请使用诸如CSS或JavaScript之类的客户端代码。浏览器中的用户代理字符串无论如何都不可靠。PHP是执行该任务的错误工具。