سایر بخش های سری آموزشی " ایجاد افزونه وردپرس "

در بخش های قبلی با کدهای کوتاه تکی یا خودبند (Self-closing) مانند [myshortcode] آشنا شدید . کدهای کوتاه همچنین می توانند به صورت زوج (enclosing) مانند [/myshortcode] محتوا[myshortcode] نیز بیایند .
اگر یک کد کوتاه به صورت زوج مورد استفاده قرار گیرد ، تابع فراخوان کدکوتاه ، یک پارامتر دوم که همان محتوا محصور شده در بین زوج کدهای کوتاه است را ، نیز دریافت می کند .
ممکن است کاربران بخواهند از شکل ساده کد کوتاه شما استفاده کنند ، پس باید تدابیری بیاندیشید که کد کوتاه شما بدون پارامتر دوم نیز بخوبی عمل کند .

function my_shortcode_handler( $atts, $content = null )

در این مواقع از تابع is_null($content) برای تشخیص بین حالت ساده و حالت زوج کدهای کوتاه استفاده می شود .
زمانی که محتوای کد کوتاه ، در زوج کدهای کوتاه محصور شده باشد ، ماکروی کامل کد کوتاه ، شامل محتوا ، جایگزین خروجی تابع می شود .
همچنین وظیفه تابع فراخوان است که مسئولیت امن کردن یا رمزگذاری رشته محتوا و نمایش آن در خروجی را بر عهده بگیرد .
در اینجا یک مثال کامل از کدهای کوتاه زوجی را مشاهده می کنید :

function caption_shortcode( $atts, $content = null ) {
    return '<span class="caption">' . $content . '</span>';
}
add_shortcode( 'caption', 'caption_shortcode' );

 

زمانی که یک کد کوتاه ، به صورت زیر استفاده می شود :

[My Caption]

خروجی به شکل زیر خواهد شد :

My Caption

و چون محتوای کد کوتاه همراه با سایر نتایج تابع فراخوان کد کوتاه ، برگشت داده می شود ، کاربر می تواند کدهای HTML خام را نیز در محتوا قرار دهد تا نتیجه پویاتر شود . به عنوان مثال کد کوتاه زیر را در نظر بگیرید :

[My Caption]

و خروجی :

My Caption

چنانچه لازم باشد در یک کد کوتاه محتوایی نظیر کدهای خام HTML نیز برگردانده شود ، باید آن محتوا را قبل از ارسال به خروجی توسط فیلتر کردن یا فرار ، امن کرد .

 

Shortcodeception – استفاده از یک کد کوتاه در یک کد کوتاه دیگر

چنانچه پارامتر $content   شامل یک کوتاه کوتاه دیگر نیز باشد ، تجزیه کننده کد کوتاه آن را نادیده می گیرد .

به عنوان مثال کد کوتاه زیر :

Caption: [myshortcode]

باعث خروجی :

Caption: [myshortcode]

خواهد شد .

چنانچه یک کد کوتاه جفتی (enclosing) اجازه قرار گرفتن یک کد کوتاه دیگر را در محتوای خود را بدهد ، امکان فراخوانی تابع do_shortcode()   به صورت بازگشتی وجود دارد .

function caption_shortcode( $atts, $content = null ) {
    return '<span class="caption">' . do_shortcode( $content ) . '</span>';
}

در مثال قبل می توان مطمئن بود که کد کوتاه موجود در محتوا ، پردازش شده است .
نتیجه کد کوتاه داخلی می تواند چیزی شبیه زیر باشد :

Caption: The result of myshortcode's handler function

 

اشکالات

تجزیه کننده کد کوتاه نمی تواند یک کد کوتاه تو در توی جفتی و تکی را کنترل کند .

به عنوان مثال کد کوتاه زیر را در نظر بگیرید :

 

[myshortcode example='non-enclosing' /] non-enclosed content [myshortcode] enclosed content [/myshortcode]

 

تجزیه کننده به جای اینکه کدهای کوتاه را به صورت کد کوتاه جفتی در نظر بگیرد ، آنها را به صورت ۲ کد کوتاه تکی در نظر میگیرد .

کدهای کوتاه جفتی نیز مانند کدهای کوتاه تکی می توانند دارای پارامتر(هایی) باشند .

 

در اینجا یک مثال از caption_shortcode()   بهبود داده شده را که از خاصیت class پشتیبانی می کند را، مشاهده می کنید :

function caption_shortcode( $atts, $content = null ) {
    $a = shortcode_atts( array(
        'class' => 'caption',
    ), $atts );
 
    return '<span class="' . esc_attr( $a['class'] ) . '">' . $content . '</span>';
}
add_shortcode( 'caption', 'caption_shortcode' );

 

 

[My Caption]

خروجی

My Caption