If Else语句检查缩略图以及它是否是移动设备-Streamline

时间:2014-12-13 作者:Christina

这段代码可以工作,但由于我的php技能不太好,我正在尝试学习如何使它更干净。

这使用了php\\u mobile\\u detect插件,因为插件作者已经有一段时间没有更新了,所以我用新类更新了该插件。它会检查设备,如果不是手机,则加载一个大小的图像,如果是手机,则加载另一个大小的图像,然后还会检查帖子是否有图像,以便我的html中没有空的内容。

QUESTION: How to make this more streamlined?

<?php if ( has_post_thumbnail() ) { /* CHECK FOR THUMBNAIL */ ?>
<?php global $post; ?>
<?php if ( wpmd_is_notphone() ){ /* IF NOT PHONE */ ?>
<?php /* IF NOT PHONE */ $srcdt = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), array( 800,300 ), true, \'\' ); ?>

<div class="entry-content" style="background-image: url(<?php echo $srcdt[0]; ?> )" >
<?php } else { /* GET SMALLER IMAGE */ ?>
<?php $srcph = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), array( 500,200 ), true, \'\' ); ?>
<div class="entry-content" style="background-image: url(<?php echo $srcph[0]; ?> )" >
<?php } /* END GET BACKGROUND THUMBNAIL */ ?>
<?php } else { /* IF NO THUMBNAIL */ ?>
<div class="entry-content">
   <?php } /* END IF ELSE THUMBNAIL */ ?>
   <div class="article-body clearfix">
      <?php the_content( __("Continue...","chrissy") ); ?>
   </div>
   <!-- /.article-body -->

</div>
<!-- /.entry-content -->

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

您的代码的问题是很难阅读,并且您无法清楚地看到真正的目标是什么。始终从所需的最小结果开始,然后使其更加灵活,但要将其逻辑分开。

你只需要一个<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>
不要忘记发送HTTPVary 标题:

header( \'Vary: User-Agent\' );
否则,输出将缓存在代理服务器中,您的内容将发送到错误的收件人。通常,您不应该尝试根据PHP检测用户代理。这个Vary 收割台将break caching for all browsers, 因此,最终,你的网站现在比没有“优化”的图像要慢得多。为此,请使用诸如CSS或JavaScript之类的客户端代码。浏览器中的用户代理字符串无论如何都不可靠。PHP是执行该任务的错误工具。

SO网友:Dev

也可以使用如下三元:

$output = has_post_thumbnail() && wpmd_is_notphone() ? $has_image : $no_image;

结束

相关推荐

函数.php文件中嵌套的短码函数

我试图获得一个短代码函数(newStuff)来显示另一个函数(oldStuff)的内部,但我遇到了麻烦。下面列出了两个短代码函数,以及我尝试过的功能。有人能帮我在“oldStuff”函数中显示“newStuff”函数吗?谢谢Current Functionsfunction newStuff(){ return \' only raw html is in this function \'; } add_shortcode(\'new\', \'newStuff\'