一系列提升图像文件的缩写,不包括范围?

时间:2014-06-22 作者:Jon

我不确定短代码是否有能力做到这一点,也不知道如何自己做到这一点。这可能吗?

我在WP之外的几个文件夹中有一系列图像。它们是包括商业广告在内的不同电视剧的屏幕盖。然而,我不想看到商业广告的屏幕盖。有没有可能制作一个这样的短代码

[episode num="1" images="1-100, 110-200, 230-300" title="Pilot"]
将HTML输出为<img src="/path/to/episodes/1/1.jpg" alt="Pilot" title="Pilot"> 对于从1到100的每个文件,那么对于从110到200的每个文件,等等。?这里让我困惑的是,我不知道如何编程以使用一系列数字并排除其他数字。

非常感谢。

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

您可以尝试以下代码段:

/**
 * Shortcode for a series of elevating image files, excluding a range
 *
 * @link http://wordpress.stackexchange.com/a/151408/26350
 */

add_shortcode( \'episode\', \'episode_shortcode\' );

function episode_shortcode( $atts = array(), $content = \'\' )
{
    //-----------------------
    // Settings:
    //
    $path   = \'/path/to/files\';
    $ext    = \'jpg\';
    //-----------------------

    // Shortcode input:
    $atts = shortcode_atts(
        array( \'num\' => 0, \'title\' => \'\', \'images\' => \'\' ), 
        $atts, 
        \'episode_shortcode\' 
    );

    // Sanitize input:
    $images = esc_attr( $atts[\'images\'] );
    $title  = esc_attr( $atts[\'title\'] );
    $num    = (int) $atts[\'num\'];

    // Init:
    $html   = \'\';    
    $ranges = explode( \',\', $images );

    // Loop over input ranges:    
    foreach( $ranges as $range )
    {
        $rng = explode( \'-\', $range );

        if( count( $rng ) == 2 )
        {
            $from = (int) trim( $rng[0] );
            $to   = (int) trim( $rng[1] );

            foreach( range( $from, $to ) as $i )
            {
                 $html .= sprintf( \'<img src="%s/%d/%s.%s" alt="%s"/>\', 
                     $path,
                     $num,
                     $i, 
                     $ext,
                     $title 
                 );
            }
        }
    } 

    return $html;
}
一个非常大的循环跳过可能会更快sprintf(), 我在这里使用它是为了更好的可读性。

结束

相关推荐

是否使用条件标记来检查是否正在使用‘page.php’?

我正在检查页面是否正确。是否正在使用php模板。我试过了is_page_template( \'page.php\' ) 但它不起作用。我也不能用is_page() 因为我只想在page.php 使用,而不是在使用其他自定义页面模板时使用。请让我知道这一点,谢谢!Edit: 应该在前面提到我有一个名为common-options.php 几乎所有的模板都包含了它(如index.php, page.php, single.php 和page_blog.php), 在此文件中,我尝试使用以下代码进行检查:if