web-dev-qa-db-ja.com

ショートコードに条件文を含めることはできますか?それらがなくても私のショートコードは空白のページをレンダリングします

次のコードは、多くの属性を含むショートコードを許可すると想定されていますが、すべての属性が常に存在するとは限らないので、その場合、包含要素には何も表示させたくありません。ただし、条件文の有無にかかわらず、自分の関数ファイルをアップロードすると、フロントエンドとバックエンドに空白のページしか表示されません。

これが条件文を含む完全なショートコードです。

function info($atts, $content = null) {
extract(shortcode_atts(array(
    "name" => '',
    "image" => '',
    "address" => '',
    "phone" => '',
    "email" => '',
    "website" => '',
    "description" => '',
    "amenities" => ''
), $atts));
return '<span class="sort">'
if($image) { '<img src="'.$image.'" />'}'
<span class="name">'.$name.'</span>
<span class="details">'
if($phone) { $phone }
if($address) { '&bull; <a href="http://maps.google.com/?q='.$address.'" target="_blank">'.$address.' <img src="<?php bloginfo('template_directory'); ?>/_/images/mapmarker.png" width="16" height="16" alt="Map" /></a><br/>'}
if($email) { '<a class="infomail" href="mailto:'.$email.'">Send Email</a>' }
if($website) { '<a class="infosite" href="'$website'">Visit Website</a>' }
if($description) { '<p class="infodetails">'.$description.'</p>' }
if($amenities) { '<p class="amenities">'.$amenities.'</p>' }
'</span>
</span>';
}

add_shortcode("info", "info");

あなたの提案をありがとう!

3
5t3ph

あなたの条件は文字列の連結を壊します(とにかくあなたのコードにはありません)

このセクションを書き直すようにしてください。

function info($atts, $content = null) {        
extract(shortcode_atts(array(            
    "name" => '',            
    "image" => '',            
    "address" => '',            
    "phone" => '',            
    "email" => '',            
    "website" => '',            
    "description" => '',            
    "amenities" => ''        
    ), $atts)); 
$output = '<span class="sort">'; 
if($image) { $output .= '<img src="'.$image.'" />';}
$output .= '<span class="name">'.$name.'</span> <span class="details">';
if($phone) { $output .= $phone; } 
if($address) { $output .= ' &bull; <a href="http://maps.google.com/?q='.$address.'" target="_blank">'.$address.' <img src="' . get_bloginfo('template_directory') . '/_/images/mapmarker.png" width="16" height="16" alt="Map" /></a><br/>'; } 
if($email) { $output .= ' <a class="infomail" href="mailto:'.$email.'">Send Email</a>'; } 
if($website) { $output .= ' <a class="infosite" href="'.$website.'">Visit Website</a>'; } 
if($description) { $output .= '<p class="infodetails">'.$description.'</p>'; } 
if($amenities) { $output .= '<p class="amenities">'.$amenities.'</p>'; } 
$output .= '</span> </span>'; 
return $output;
}

add_shortcode("info", "info");
3
Michael