نحوه تزریق کد سفارشی `style` و `script` به پنل CRM با استفاده از هوکهای اکشن `la24_head` و `la24_footer`.
مرور کلی
پنل CRM در LA24Core بهصورت یک سند HTML مستقل رندر میشود — با `head` و `body` مخصوص به خودش — و به `header.php` / `footer.php` قالب فعال وردپرس وابسته نیست. دو هوک اکشن، دو نقطهای را مشخص میکنند که این سند میتواند از آنها گسترش داده شود:
- `la24_head` — درون تگ `<head>` پنل CRM اجرا میشود.
- `la24_footer` — درست قبل از تگ بستن `</body>` پنل CRM اجرا میشود.
هر دو هوک در فایل `includes/helpers/la24-core-functions.php` تعریف شدهاند. خود هسته نیز در فایل `includes/classes/LA24_Hook.php` به این هوکها متصل میشود (برای چاپ فاوآیکون، اسکریپتها/استایلهای صفبندیشده و اسکریپتهای فوتر) — همان الگویی که افزونه شما نیز باید دنبال کند.
امضای هوکها
php
// includes/helpers/la24-core-functions.php
do_action( 'la24_head' );
do_action( 'la24_footer' );**نوع:** Action (بدون پارامتر ورودی)
یک callback را با `add_action()` متصل کنید و مستقیماً از درون آن، markup را echo کنید.
تفاوت با wp_head و wp_footer
`la24_head` و `la24_footer` دقیقاً مانند هوکهای خود وردپرس یعنی `wp_head` و `wp_footer` عمل میکنند — همان هدف، همان روش استفاده («یک callback متصل کن و markup را echo کن») — با یک تفاوت مهم: **دامنه اجرا (scope)**.
| `wp_head` / `wp_footer` | `la24_head` / `la24_footer` | |
|---|---|---|
| اجرا روی | تمام صفحاتی که توسط قالب فعال وردپرس رندر میشوند (فرانتاند سایت) | فقط درون سند پنل CRM |
| چاپشده از | `header.php` / `footer.php` قالب | `templates/la24-header.php` / `templates/la24-footer.php` |
| قابل مشاهده در فرانتاند سایت | بله | **خیر** |
| قابل مشاهده درون پنل CRM | خیر (مگر اینکه قالب هم آن را آنجا لود کند) | بله |
هر چیزی که به `la24_head` یا `la24_footer` متصل شود، **فقط** هنگام رندر شدن پنل CRM چاپ میشود. این کد هرگز در صفحات عمومی سایت (نوشتهها، برگهها، فروشگاه و غیره) تزریق نمیشود، حتی اگر افزونه شما در کل سایت فعال باشد — بنابراین نیازی به بررسی نوع صفحه در callback خود برای جلوگیری از نمایش در فرانتاند نیست.
تزریق استایل سفارشی با la24_head
یک callback را به `la24_head` متصل کنید و مستقیماً یک بلوک `style` را echo کنید:
php
add_action( 'la24_head', function () {
?>
<style>
.la24-widget-header {
border-radius: 8px;
}
.my-crm-ext-banner {
background: #1e293b;
color: #fff;
padding: 8px 16px;
}
</style>
<?php
} );برای بارگذاری یک فایل CSS خارجی بهجای CSS درونخطی:
php
add_action( 'la24_head', function () {
echo '<link rel="stylesheet" href="' . esc_url( MY_CRM_EXT_URL . 'assets/css/panel.css' ) . '">';
} );> برای CSSای که به مدیریت وابستگیها و نسخهبندی مناسب نیاز دارد، بهجای echo کردن مستقیم تگ `link`، از تابع `la24_enqueue_style()` (که به اکشن `la24_enqueue_scripts` متصل است و خود این اکشن روی `la24_head` اجرا میشود) استفاده کنید. روش مستقیم `la24_head` که در بالا نشان داده شد را برای بلوکهای استایل کوچک و یکبارمصرف بهکار ببرید.
تزریق اسکریپت سفارشی با la24_footer
یک callback را به `la24_footer` متصل کنید و یک بلوک `script` را echo کنید:
php
add_action( 'la24_footer', function () {
?>
<script>
(function () {
console.log( 'My CRM Extension loaded' );
})();
</script>
<?php
} );به همین شکل، میتوان بهجای جاوااسکریپت درونخطی، یک فایل خارجی چاپ کرد:
php
add_action( 'la24_footer', function () {
echo '<script src="' . esc_url( MY_CRM_EXT_URL . 'assets/js/panel.js' ) . '"></script>';
} );> برای اسکریپتهایی که وابستگی دارند (مثلاً به `jquery`) یا نیاز به دادههای `la24_localize_script()` دارند، بهجای تگ خام ``، از تابع `la24_enqueue_script()` استفاده کنید.
ترتیب اجرا (اولویت)
هسته چندین callback را با اولویتهای مختلف به این دو هوک متصل میکند (`includes/classes/LA24_Hook.php`):
| هوک | اولویت | callback هسته | هدف |
|---|---|---|---|
| `la24_head` | 1 | `la24_enqueue_scripts` | اجرای اکشن `la24_enqueue_scripts` تا افزونهها بتوانند asset صفبندی کنند |
| `la24_head` | 100 | `la24_print_styles`, `la24_print_head_scripts` | چاپ تمام استایلها/اسکریپتهای صفبندیشده |
| `la24_head` | 101 | `fivicon` | چاپ تگهای `link` فاوآیکون |
| `la24_footer` | 20 | `la24_print_footer_scripts` | چاپ اسکریپتهای صفبندیشده برای فوتر |
اولویت پیشفرض (`10`) برای یک بلوک ساده `style` / `script` درونخطی کافی است — این اولویت پیش از چاپ assetهای صفبندیشده اجرا میشود. اگر کد شما به بارگذاری قبلیِ یک اسکریپت یا استایل صفبندیشده وابسته است، callback خود را با اولویتی بزرگتر از `100` (برای `la24_head`) یا `20` (برای `la24_footer`) متصل کنید:
php
add_action( 'la24_footer', array( $this, 'print_footer_script' ), 30 ); // پس از اسکریپتهای فوتر صفبندیشدهمثال کامل
php
<?php
namespace MyPlugin;
defined( 'ABSPATH' ) || exit;
class My_CRM_Panel_Assets {
public function __construct() {
add_action( 'la24_head', array( $this, 'print_styles' ) );
add_action( 'la24_footer', array( $this, 'print_scripts' ) );
}
public function print_styles() {
?>
<style>
.my-crm-ext-banner {
background: #1e293b;
color: #fff;
padding: 8px 16px;
}
</style>
<?php
}
public function print_scripts() {
?>
<script>
document.addEventListener( 'DOMContentLoaded', function () {
var banner = document.createElement( 'div' );
banner.className = 'my-crm-ext-banner';
banner.textContent = 'My CRM Extension active';
document.body.prepend( banner );
} );
</script>
<?php
}
}
new My_CRM_Panel_Assets();مرجع سریع
| هدف | هوک / تابع | نوع | محل اجرا |
|---|---|---|---|
| تزریق `<style>` / `<link>` در `<head>` پنل CRM | `la24_head` | Action | فقط پنل CRM |
| تزریق `<script>` قبل از `</body>` در پنل CRM | `la24_footer` | Action | فقط پنل CRM |
| صفبندی یک اسکریپت نسخهدار | `la24_enqueue_script()` | Function | توسط `la24_head` / `la24_footer` چاپ میشود |
| صفبندی یک فایل استایل نسخهدار | `la24_enqueue_style()` | Function | توسط `la24_head` چاپ میشود |
| هوک ثبت فراخوانیهای صفبندی | `la24_enqueue_scripts` | Action | روی `la24_head`، با اولویت 1 اجرا میشود |