如何在Shortcodes.php中的$OUTPUT中创建条件语句?

时间:2015-09-12 作者:Ste7en

我有一个短代码,在$输出字段中有HTML,这很可爱。我只想在它的底部添加一段话,这是以这句话为条件的:

<?php if ( get_post_meta( get_the_ID(), \'campus\', true ) ) : ?> 
我不太清楚如何将这样的语句格式化(如果可能的话)到现有的$输出字段中。

下面是$输出目前的样子,我想在第8行添加这个条件,基本上还有另一个段落标记,其中包含一些内容,只有在语句为true时才会显示:

\'<div class="w-blog-entry" style="padding:0;">
                                <div class="w-blog-entry-h">
                                <div class="l-subsection color_dark" style="background-image: url(\'.$the_thumbnail.\'); background-position: center center; padding-top:0; padding-bottom:0; background-attachment: inherit;">
                                <div class="l-subsection-h">
                                    <div class="l-subsection-hh g-html i-cf" style="font-family:Century Gothic; text-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);">
                                        <a class="w-blog-entry-link" href="\'.get_permalink(get_the_ID()).\'"><h2 class="w-blog-entry-title" style="line-height:1em; margin-left:0; padding-left:4px; font-size:20px;"><span class="w-blog-entry-title-h" style="color:#fff;">\'.get_post_meta( get_the_ID(), \'destination\', true ).\'<br><span style="font-size:0.6em; color:#f2f2f2;">\'.get_post_meta( get_the_ID(), \'depart\', true ).\' <span style="text-transform: lowercase; font-size:0.8em;">to</span> \'.get_post_meta( get_the_ID(), \'return\', true ).\'</span></span></h2></a>
                                        <p style="line-height:1.2em; padding-left:4px; font-size:0.9em;">\'.get_post_meta( get_the_ID(), \'projectdesc\', true ).\'</p>                                      
                                    </div>
                                </div>
                            </div>

                            </div>\';
    }

    $output .=          \'</div>
                    </div>
                </div>\'
这是可能的,还是我必须对具有两个输出的短码设置一个完整的其他条件?

如果您需要更多的短码上下文,请告诉我,如果我的原始目标是可能的,我只是不想浪费太多空间。

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

如果我没听错,你只想用“?”if语句类型:

$output = \'<div class="w-blog-entry" style="padding:0;">
                            <div class="w-blog-entry-h">
                            <div class="l-subsection color_dark" style="background-image: url(\'.$the_thumbnail.\'); background-position: center center; padding-top:0; padding-bottom:0; background-attachment: inherit;">
                            <div class="l-subsection-h">
                                <div class="l-subsection-hh g-html i-cf" style="font-family:Century Gothic; text-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);">
                                    <a class="w-blog-entry-link" href="\'.get_permalink(get_the_ID()).\'"><h2 class="w-blog-entry-title" style="line-height:1em; margin-left:0; padding-left:4px; font-size:20px;"><span class="w-blog-entry-title-h" style="color:#fff;">\'.get_post_meta( get_the_ID(), \'destination\', true ).\'<br><span style="font-size:0.6em; color:#f2f2f2;">\'.get_post_meta( get_the_ID(), \'depart\', true ).\' <span style="text-transform: lowercase; font-size:0.8em;">to</span> \'.get_post_meta( get_the_ID(), \'return\', true ).\'</span></span></h2></a>
                                    <p style="line-height:1.2em; padding-left:4px; font-size:0.9em;">\'.get_post_meta( get_the_ID(), \'projectdesc\', true ).\'</p>\';
$output .= get_post_meta( get_the_ID(), \'campus\', true ) ? \'<p>True so do this paragraph</p>\' : \'<p>false, so do this instead</p>\';
$output.=\'                                    </div>
                            </div>
                        </div>

                        </div>\';
如果有其他的标准也可以,所以我不确定混淆在哪里。

另一种方法是使用php输出缓冲区,其工作方式如下:

ob_start();
?>
<div class="w-blog-entry" style="padding:0;"> etc etc
<?php if(get_post_meta( get_the_ID(), \'campus\', true )) {?>
<p>True paragraph</p>
<?php }else{ ?>
<p>false paragraph</p>
<?php } ?>
完成所有输出后,将其放入$输出变量中,如下所示:

$output = ob_get_clean();
当您启动输出缓冲区时,基本上意味着您在PHP标记之外放置的任何HTML都会进入缓冲区,而不是输出到浏览器。当输出中有很多不同的条件和逻辑时,我更喜欢这样。

ob_start, ob_get_clean

SO网友:MD MUSA

$output = \'Hello World !\'; 意味着您只需在$输出变量中赋值。但是当你使用like时$a = 1; $output = \'Hello\'; if($a == 1){ $output .= \'World\'; }else{ $output .= \'Universe\'; } $output .= \'!\'; 如果打印此$输出,则输出将与Hello World ! 因为串联

所以如果你不清楚(your_statement) ? \'True\' : \'False\' 喜欢get_post_meta( get_the_ID(), \'campus\', true ) ? \'<p>True so do this paragraph</p>\' : \'<p>false, so do this instead</p>\'; <你可以这样写 if(get_post_meta( get_the_ID(), \'campus\', true )){ $output .= \'<p>True so do this paragraph</p>\'; }else{ $output .= <p>false, so do this instead</p>\'; }

谢谢你

相关推荐

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

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