如何获取目录中不同扩展名的图像的文件扩展名?

时间:2015-05-07 作者:Paras Shah

我在Wordpress中发布这篇文章是因为我正在努力获取Wordpress存储库中所有插件的特色图片。

http://plugins.svn.wordpress.org 包含我想要的图像。

但是,某些文件的扩展名是。png和一些是。jpg公司

所以,我想在我的wordpress插件中使用img src HTML标记显示这些图像。

但是,如何确定图像扩展是否为。jpg和。png并得到相应的结果?

我已经读过pathinfo和其他PHP函数,但它们只告诉我们指定图像的扩展。

更清楚地说:

$image_extension = "http://plugins.svn.wordpress.org/" .  $plugin_slug .    
"/assets/" . "banner-772x250" . (and here the file extension, either .png or .jpg);
$plugin\\u slug是指我根据用户在搜索栏中输入的内容从wordpress插件API获得的插件的slug。

例如,如果我在上面的搜索栏(插件中)中通过yoast搜索Wordpress SEO,那么我会从Wordpress中得到它的slug。org插件API,但我不知道特征图像的扩展是否是。png或。jpg,

因此,我想获取扩展信息,然后将其打印在$image\\u扩展中,以便显示该插件的特色图像(横幅)。

我希望我能清楚地解释我的问题。

如果有人能帮忙,请。。。

1 个回复
SO网友:fuxia

您可以发送HEAD请求allowed resources 直到你达到状态200, cache 结果(post meta、选项等),并显示最佳匹配。

允许的横幅大小和格式为:

\'banner-1544x500.png\',
\'banner-772x250.png\',
\'banner-1544x500.jpg\',
\'banner-772x250.jpg\',
允许的图标大小和格式:

\'icon.svg\',
\'icon-256x256.jpg\',
\'icon-128x128.png\',
发送HEAD请求可以通过使用wp_remote_head() 或者使用cURL。

让我们把它抽象出来:

namespace Wpse\\Http;

interface Remote_Resource
{
    /**
     * @param  string $url
     * @return bool
     */
    public function exists( $url );
}

final class Curl_Remote_Resource implements Remote_Resource
{
    /**
     * @param  string $url
     * @return bool
     */
    public function exists( $url )
    {
        $status = `curl -s -o /dev/null -I -w "%{http_code}" $url`;

        return 200 === (int) $status;
    }
}
现在,我们只需要一个类来针对不同的图像变化使用该检查:

/**
 * Find banners and icon for a plugin hosted on wordpress.org
 *
 *
 * @version 2015.08.09
 * @author  toscho
 * @license MIT
 */
final class Wp_Org_Assets
{
    /**
     * @see https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/
     *
     * @var array
     */
    private $banners = [
        \'banner-1544x500.png\',
        \'banner-772x250.png\',
        \'banner-1544x500.jpg\',
        \'banner-772x250.jpg\',
    ];
    /**
     * @see https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/
     *
     * @var array
     */
    private $icons = [
        // Do not embed unknown SVG in your HTML. Use the `<img>` element instead!
        \'icon.svg\',
        \'icon-256x256.jpg\',
        \'icon-128x128.png\',
    ];

    /**
     * @var string
     */
    private $url;

    /**
     * @var \\Wpse\\Http\\Remote_Resource
     */
    private $remote;

    /**
     * This constructor is private, use one of the static "named constructors" instead.
     *
     * @see http://verraes.net/2014/06/named-constructors-in-php/
     * @param string                     $slug Plugin slug like "multilingual-press"
     * @param \\Wpse\\Http\\Remote_Resource $remote
     */
    private function __construct( $slug, Remote_Resource $remote )
    {
        $this->url    = "https://plugins.svn.wordpress.org/$slug/assets";
        $this->remote = $remote;
    }

    /**
     * @param string                     $slug Plugin slug like "multilingual-press"
     * @param \\Wpse\\Http\\Remote_Resource $remote
     * @return static
     */
    public static function from_slug( $slug, Remote_Resource $remote )
    {
        return new static( $slug, $remote );
    }

    /**
     * @param string                     $url Plugin URL like "https://wordpress.org/plugins/multilingual-press/"
     * @param \\Wpse\\Http\\Remote_Resource $remote
     * @return static
     */
    public static function from_main_url( $url, Remote_Resource $remote )
    {
        $matches = [];
        preg_match( \'~/plugins/([^/]*)/~\', $url, $matches );

        return new static( $matches[ 1 ], $remote );
    }

    /**
     * @param string                     $url SVN URL like "https://plugins.svn.wordpress.org/multilingual-press/"
     * @param \\Wpse\\Http\\Remote_Resource $remote
     * @return static
     */
    public static function from_svn_url( $url, Remote_Resource $remote )
    {
        $matches = [];
        preg_match( \'~svn\\.wordpress\\.org/([^/]*)/~\', $url, $matches );

        return new static( $matches[ 1 ], $remote );
    }

    /**
     * @return string
     */
    public function banner()
    {
        return $this->find( $this->banners );
    }

    /**
     * @return string
     */
    public function icon()
    {
        return $this->find( $this->icons );
    }

    /**
     * @param array $list
     * @return string
     */
    private function find( array $list )
    {
        foreach ( $list as $file )
            if ( $this->remote->exists( "$this->url/$file" ) )
                return "$this->url/$file";

        return \'\';
    }
}
然后我们可以在几行代码中使用这些类:

$assets = Wp_Org_Assets::from_main_url( \'https://wordpress.org/plugins/multilingual-press/\', new Curl_Remote_Resource );
$files  = [
    \'banner\' => $assets->banner(),
    \'icon\'   => $assets->icon()
];

foreach ( $files as $name => $url )
{
    if ( $url )
        printf(
            \'%1$s: <a href="%2$s"><code>%2$s</code></a><br><img style="max-width: 100%%" src="%2$s"><br>\',
            $name,
            $url
        );
    else
        printf(
            \'No %s found.<br>\',
            $name
        );
}

结束

相关推荐

由于在cron cPanel文件中加载核心文件,WordPress.org不允许我的插件

我制作了一个插件并尝试在wordpress上安装。org但Wordpress给我的错误消息是##直接调用核心加载文件是不正确的。我在插件中使用了一个cron文件。这个cron也可以通过CPanel设置。这就是为什么我必须包括\'wp-config.php\' 我将此作为include \'../../../wp-config.php\'; 我的cron文件路径是这样的https://www.abc.com/wp-content/plugins/klicktip/cron_execute.php?