نحوه تزریق کد سفارشی style و script به پنل CRM

نحوه تزریق کد سفارشی `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 کنید.

`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` که در بالا نشان داده شد را برای بلوک‌های استایل کوچک و یک‌بارمصرف به‌کار ببرید.

یک 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 اجرا می‌شود