在 functions.php Wordpress 函数 add_shortcode 中添加 php 代码

Add php code inside the function add_shortcode in functions.php Wordpress

如何在 functions.php

中的函数 add_shortcode 中添加 php 代码

例如:

<?php $images = get_field('img_novinki'); if( $images ) { ?>


<div id="carousel" class="flexslider">
    <ul class="slides gallery">
        <?php foreach( $images as $image ): ?>
            <li>
                <a href="<?php echo $image['url']; ?>"><img src="<?php echo $image['sizes']['thumbnail']; ?>" alt="<?php echo $image['alt']; ?>" /></a>
            </li>
        <?php endforeach; ?>
    </ul>
</div> <?php } ?>

函数中的简码 PHP:

function my_novinki( $atts ) 
{
    return '';
}
add_shortcode( 'my_novinki', 'my_novinki');

据我所知,您需要执行以下操作。在 functions.php 添加:

function my_novinki( $atts ) 
{
   $images = get_field('img_novinki'); 

   if( $images ) {

    echo '<div id="carousel" class="flexslider">';
    echo '<ul class="slides gallery">';

      foreach( $images as $image ):
            echo '<li>';
            echo '<a href="'. $image["url"] .'"><img src="'.$image["sizes"]["thumbnail"] .'" alt="'. $image["alt"] .'" /></a>';
            echo '</li>';
      endforeach;

   echo '</ul>';
   echo '</div>'; 
  }

}

add_shortcode( 'my_novinki', 'my_novinki');

然后可以使用 [my_novinki] 调用,或者如果在 php 模板中使用 <?php echo do_shortcode['my_novinki'];

请参阅 Codex:“..简码调用的函数不应产生任何类型的输出。简码函数应该 return 用于替换简码的文本。”

您需要将代码包装在 ob_start() 和 ob_get_clean() 中:

add_shortcode( 'my_novinki', function my_novinki( $atts ) {
    ob_start();
    $images = get_field( 'img_novinki' );
    if( $images ) { ?>
        <div id='carousel' class='flexslider'>
            <ul class='slides gallery'> <?php
                foreach( $images as $image ) { ?>
                    <li>
                        <a href='<?php echo $image['url']; ?>'>
                            <img src='<?php echo $image['sizes']['thumbnail']; ?>' alt='<?php echo $image['alt']; ?>' />
                        </a>
                    </li> <?php
                } ?>
            </ul>
        </div> <?php
    }
    $out = ob_get_clean();
    return $out;
});