发布缩略图、条件,否则将不起作用

时间:2017-02-20 作者:Archangel17

我正在为我的帖子获取缩略图。就像第一个自定义元框没有任何value/content, 应使用}else if ($img =get_post_custom_values(\'backdrop_img\')) { $imgsrc = $img[0]; } (这是第二个代谢箱)然后是第三个,else if 它也没有任何content/value 只需使用我的主题目录中的图像。

但我的问题是,它只适用于第一个元框,即:

if($img = get_post_custom_values(\'featured_img\')){ $imgsrc = $img[0];
在这一行之后,如果条件不起作用,代码就不起作用,也不会从第二个自定义元框中获取值,也不会使用defaul图像。

我对php和stil的学习还很陌生,所以我仍然很困惑。如果有任何帮助,我将不胜感激。

这是我目前的代码。

更新:使用循环的整个测试代码。

   <?php $year = date ("Y"); query_posts(array(get_option(\'year\') => $year, \'posts_per_page\' => 5, \'showposts\' => 5)); ?>
    <?php while (have_posts()) : the_post(); ?>
    <?php   if (has_post_thumbnail()) {
    $imgsrc = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),\'medium\');
    $imgsrc = $imgsrc[0];
    } elseif ($postimages = get_children("post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=0")) {
    foreach($postimages as $postimage) {
    $imgsrc = wp_get_attachment_image_src($postimage->ID, \'medium\');
    $imgsrc = $imgsrc[0];
    }
    } elseif (preg_match(\'/<img [^>]*src=["|\\\']([^"|\\\']+)/i\', get_the_content(), $match) != FALSE) {
    $imgsrc = $match[1];
    } else {
    if($img = get_post_custom_values(\'featured_img\')){
    $imgsrc = $img[0];
    }elseif($img = get_post_custom_values(\'backdrop_img\')){
    $imgsrc = $img;
    } else {
    $img = get_template_directory_uri().\'/movies/no_img.png\';
    $imgsrc = $img;
    } 
    } ?>
    <div class="post_content">
    <img src="<?php echo $imgsrc; $imgsrc = \'\'; ?>
    <a href="<?php the_permalink() ?>" class="slide-link" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    <p class="sc-desc">  <?php the_excerpt(); ?></p>
    </div>
    <?php } endwhile; ?>    

4 个回复
SO网友:Archangel17

谢谢大家的帮助!我真的很感激。我可以通过移除[0] 在里面$imgsrc = $img[0]; 和使用custom_get_meta()

例如:

$img = post_movie_get_meta(\'featured_img\')

以及:

$img = post_movie_get_meta(\'backdrop_img\')

SO网友:David Lee

我想你错过了$post ID:

    <?php
    //lets put the default first
    $img = get_template_directory_uri() . \'/movie/no_img.png\';
    $imgsrc = $img;

    if (has_post_thumbnail()) {
        $imgsrc = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), \'medium\');
        $imgsrc = $imgsrc[0];
    } elseif ($postimages = get_children("post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=0")) {
        foreach ($postimages as $postimage) {
            $imgsrc = wp_get_attachment_image_src($postimage->ID, \'medium\');
            $imgsrc = $imgsrc[0];
        }
    } elseif (preg_match(\'/<img [^>]*src=["|\\\']([^"|\\\']+)/i\', get_the_content(), $match) != FALSE) {
        $imgsrc = $match[1];
    } else {
        $img = get_post_custom_values(\'featured_img\', get_the_ID());
        if (isset($img)) {
            $imgsrc = $img[0];
        } else {
            $img = get_post_custom_values(\'backdrop_img\', get_the_ID());
            if (isset($img)) {
                $imgsrc = $img[0];
            } 

        }
    }
    //use it after all the logic
    echo $imgsrc;

    ?>
顺便说一下,如果这是在循环中,你可以使用get_the_ID

SO网友:Jignesh Patel

我认为你错了,否则如果不对,那么你的else部分就不能执行。文档链接:http://php.net/manual/en/control-structures.elseif.php

您的代码如下:

else if ($img =get_post_custom_values(\'backdrop_img\')) {
替换为:

elseif ($img =get_post_custom_values(\'backdrop_img\')) {
我希望这会有帮助。

SO网友:Johansson

这不是您应该使用的方式elseif. 请注意:elseif 条件将运行,无论初始结果如何if(). 您应该使用嵌套if() 相反

看看这个:

 <?php 
    $year = date ("Y");
    query_posts(
        array(
            get_option(\'year\') => $year,
            \'posts_per_page\' => 5,
            \'showposts\' => 5)
        );
    while ( have_posts() ) : the_post(); 
        if ( has_post_thumbnail() ) {
            $imgsrc = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), \'medium\' );
            $imgsrc = $imgsrc[0];
        } else {
            $postimages = get_children( "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=0" );
            foreach( $postimages as $postimage ) {
                $imgsrc = wp_get_attachment_image_src($postimage->ID, \'medium\');
                $imgsrc = $imgsrc[0];
            }
            if ( !$imgsrc ) {
                preg_match(\'/<img [^>]*src=["|\\\']([^"|\\\']+)/i\', get_the_content(), $match);
                $imgsrc = $match[1];
                if (!$imgsrc){
                    $img = get_post_custom_values(\'featured_img\');
                    $imgsrc = $img[0];
                    if (!$imgsrc){
                        $img = get_post_custom_values(\'backdrop_img\');
                        $imgsrc = $img;
                        if (!$imgsrc){
                            $img = get_template_directory_uri().\'/movies/no_img.png\';
                            $imgsrc = $img;
                            }
                    }
                }
            }
        } ?>
        <div class="post_content">
        <img src="<?php echo $imgsrc; $imgsrc = \'\'; ?>
        <a href="<?php the_permalink() ?>" class="slide-link" title="<?php the_title(); ?>"><?php the_title(); ?></a>
        <p class="sc-desc">  <?php the_excerpt(); ?></p>
        </div>
        <?php } endwhile; ?>    
在这段代码中,我们检查帖子是否有缩略图。如果没有,那么继续去找孩子们。然后再次检查是否已检索到图像。如果没有,那么我们继续下一种方法。然后我们再检查一遍,以此类推。

最后,如果所有方法都不起作用,我们只需返回png 映像并结束if().

FYI: 这就是elseif 工程:

if ( //First condition ) { // check if the first condition is true, and do stuff } elseif ( //Second condition ) { //Check second condition too, and do some more stuff, no matter what was the result of the first condition and stuffs }

PS: 我没有验证WordPress语法。我刚刚更新了if() 为您构建。

PS2: 您也可以使用if() 之后if(), 一行接一行。这也是一种解决方案,如下所示:

if ( //First ) { // First stuff } else { If ( //Second ) //Some code here; if ( //Third ) //Some more code; if ( //4th ) //Some extra code; }

根据您的需求和风格进行选择。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请