webwizo/laravel-shortcodes 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

webwizo/laravel-shortcodes

Composer 安装命令:

composer require webwizo/laravel-shortcodes

包简介

Wordpress like shortcodes for Laravel 11, 12 and 13

README 文档

README

Latest Version on Packagist Software License Coverage Status Quality Score Total Downloads

WordPress-like shortcodes for Laravel 11, 12, and 13 (PHP 8.2+).

Laravel Shortcodes

Documentation last updated: 2026-04-22

[b class="bold"]Bold text[/b]

[tabs]
  [tab]Tab 1[/tab]
  [tab]Tab 2[/tab]
[/tabs]

[user id="1" display="name"]

If you are looking for Laravel 4.2, see: https://github.com/patrickbrouwers/Laravel-Shortcodes

Install

Via Composer:

composer require webwizo/laravel-shortcodes

Laravel 11+ discovers the package automatically. On older setups, register Webwizo\Shortcodes\ShortcodesServiceProvider in config/app.php (or bootstrap/providers.php where applicable).

Service provider (manual registration)

Webwizo\Shortcodes\ShortcodesServiceProvider::class,

You can use the facade for shorter code. Add this to your aliases (optional):

'Shortcode' => Webwizo\Shortcodes\Facades\Shortcode::class,

The class is bound to the ioC as shortcode

$shortcode = app('shortcode');

Usage

withShortcodes()

To enable the view compiling features:

return view('view')->withShortcodes();

This will enable shortcode rendering for that view only.

withShortcodes() in Mailables

You can also enable shortcode compilation for a mailable view:

Available since: v1.0.31

use Illuminate\Mail\Mailable;

class NewsletterMail extends Mailable
{
    public function build()
    {
        return $this
            ->subject('Weekly newsletter')
            ->view('emails.newsletter', [
                'content' => 'Mail content',
            ])
            ->withShortcodes();
    }
}

emails/newsletter.blade.php

[b class="mail"]{{ $content }}[/b]

The shortcode tags in that mailable view will be compiled during rendering.

Enable through class

Shortcode::enable();

Disable through class

Shortcode::disable();

Disabling some views from shortcode compiling

With the config set to true, you can disable the compiling per view.

return view('view')->withoutShortcodes();

Default compiling

To use default compiling:

Shortcode::compile($contents);

Strip shortcodes from rendered view.

return view('view')->withStripShortcodes();

Strip shortcode through class

Shortcode::strip($contents);

Shortcode syntax and parser

The compiler scans templates left to right. Behaviour relevant to authoring tags:

Topic Behaviour
Attributes Quoted values may contain spaces. Keys may include hyphens (e.g. data-size="large"). Parsing follows the same general rules as WordPress shortcode attributes.
Void / self-closing A tag such as [alert type="info"] with no matching [/alert] is treated as self-closing (no inner body). Use explicit [/tag] when you need wrapping content.
Nested same-name tags Nested tags with the same name (e.g. [div]…[div]…[/div]…[/div]) are matched using balanced opening/closing pairs, innermost structure preserved.
Unknown [ text Text in square brackets that does not start with a registered shortcode name is left unchanged (so prose like [I agree …] is not eaten).
Escaping Use doubled brackets to output a literal shortcode: [[b]][b].

PHPUnit regression tests for these cases live under tests/GitHubIssue*.php.

Registering new shortcodes

Create a new ServiceProvider where you can register all the shortcodes.

php artisan make:provider ShortcodesServiceProvider

After defining shortcodes, add the ServiceProvider to the providers array in config/app.php (or bootstrap/providers.php).

Example: register your shortcodes provider

App\Providers\ShortcodesServiceProvider::class,

Callback

Shortcodes can be registered within ShortcodesServiceProvider with a callback:

php artisan make:provider ShortcodesServiceProvider

ShortcodesServiceProvider.php Class File

<?php namespace App\Providers;

use App\Shortcodes\BoldShortcode;
use Illuminate\Support\ServiceProvider;
use Shortcode;

class ShortcodesServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        Shortcode::register('b', BoldShortcode::class);
        Shortcode::register('i', 'App\Shortcodes\ItalicShortcode@custom');
    }
}

Default class for BoldShortcode

You can store each shortcode within their class app/Shortcodes/BoldShortcode.php

namespace App\Shortcodes;

class BoldShortcode {

  public function register($shortcode, $content, $compiler, $name, $viewData)
  {
    return sprintf('<strong class="%s">%s</strong>', $shortcode->class, $content);
  }

}

Class with custom method

You can store each shortcode within their class app/Shortcodes/ItalicShortcode.php

namespace App\Shortcodes;

class ItalicShortcode {

  public function custom($shortcode, $content, $compiler, $name, $viewData)
  {
    return sprintf('<i class="%s">%s</i>', $shortcode->class, $content);
  }

}

Register helpers

If you only want to show the html attribute when the attribute is provided in the shortcode, you can use $shortcode->get($attributeKey, $fallbackValue = null)

class BoldShortcode {

  public function register($shortcode, $content, $compiler, $name, $viewData)
  {
    return '<strong '. $shortcode->get('class', 'default') .'>' . $content . '</strong>';
  }

}

Shortcode Artisan Generator Command

This package provides an Artisan command to quickly generate shortcode classes:

php artisan make:shortcode YourShortcodeName
  • By default, this creates a new class in app/Shortcodes/YourShortcodeNameShortcode.php.
  • If the file already exists, use the --force option to overwrite:
php artisan make:shortcode YourShortcodeName --force

Customizing the Stub

You can publish the stub file to customize the generated class:

php artisan vendor:publish --tag=shortcode-stubs

This will copy the stub to resources/stubs/shortcode.stub in your Laravel app. Edit this file to change the template for new shortcode classes.

Testing

From the package root (after composer install):

composer test
# or
vendor/bin/phpunit

Change log

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING and CONDUCT for details.

Security

If you discover any security related issues, please email webwizo@gmail.com instead of using the issue tracker.

Credits

Support me

Buy Me A Coffee

License

The MIT License (MIT). Please see License File for more information.

webwizo/laravel-shortcodes 适用场景与选型建议

webwizo/laravel-shortcodes 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 697.09k 次下载、GitHub Stars 达 218, 最近一次更新时间为 2016 年 05 月 23 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「wordpress」 「laravel」 「shortcodes」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 webwizo/laravel-shortcodes 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 webwizo/laravel-shortcodes 我们能提供哪些服务?
定制开发 / 二次开发

基于 webwizo/laravel-shortcodes 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 697.09k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 224
  • 点击次数: 13
  • 依赖项目数: 8
  • 推荐数: 0

GitHub 信息

  • Stars: 218
  • Watchers: 8
  • Forks: 52
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2016-05-23