| کانال وردپرس |
описание
⭕️ کانال وردپرس دولوپیکس 💠 دولوپیکس | جامعه توسعهدهندگان ایرانی 💎 @Developix 🚀 Developix.ir 📌 پشتیبانی و تبلیغات: @DevelopixSupport
3 508
подписчиков
Охват к подписчикам
27,3%
ERR
Реакции к просмотрам
0,44%
148 на 27 постов
Пересылки к просмотрам
0,76%
255
Постов в день
0,1
всего 27
Где отзываются чаще
доля реакций к просмотрам- 25 апр.🌐 دریافت آپدیتها و پلاگینهای وردپرس در شرایط نت ملی در شرایط فعلی اینترنت (عدم دسترسی به اینترنت بینالملل)، وردپرس نمیتونه به مخزن اصلی وصل بشه و همین باعث میشه: – آپدیت ها انجام نشه – نصب/آپدیت پلاگینها fail بشه برای حل این موضوع، یه راهکار سبک به صورت افزونه (کاملا رایگان) آماده شده که درخواستهای وردپرس به مخزن رسمی رو هندل میکنه و امکان دریافت افزونهها و آپدیتها رو از داخل خود وردپرس فراهم میکنه. ✅ برای فعالسازی افزونه توکن API زیر را از بخش تنظیمات وردپرس، Taba Wp Connect وارد کنید : OnEDGFsyJDHKyHbPYEubSGtjIfB6YfcA 🔖 #Wordpress #وردپرس 👤 Ali 💎 Channel: @DevelopixWordpress5,09%
- 14 авг.без подписи1,16%
- 30 июл.Dependency Injection در پلاگینهای وردپرس 💉 خیلی وقتها توی توسعه پلاگین وردپرس، همهچیز را میبریم داخل یک کلاس بزرگ: queryها، لاگها، ارسال ایمیل، تنظیمات و… نتیجه؟ کد سختخوان، سختتست و پر از وابستگی پنهان 🤕 یکی از راهحلهای جدی برای این مشکل در معماری نرمافزار، استفاده از Dependency Injection (DI) است. Dependency Injection یعنی چی؟ بهجای اینکه یک کلاس خودش وابستگیها را بسازد، آنها را از بیرون دریافت میکند. یعنی بهجای: class My_Plugin { private $mailer; public function __construct() { $this->mailer = new Wp_Mailer(); } } مینویسیم: class My_Plugin { private $mailer; public function __construct( Wp_Mailer $mailer ) { $this->mailer = $mailer; } } حالا My_Plugin فقط از Wp_Mailer استفاده میکند، ولی مسئول ساختنش نیست. این یعنی coupling کمتر و تستپذیری بیشتر ✅ نمونه ساده در پلاگین وردپرس فرض کن یک کلاس لاگگیر و یک سرویس سفارش داریم: class Logger { public function info( $message ) { error_log( '[my-plugin] ' . $message ); } } class Order_Service { private $logger; public function __construct( Logger $logger ) { $this->logger = $logger; } public function create( $data ) { // logic... $this->logger->info( 'Order created: ' . $data['id'] ); } } class My_Plugin_Bootstrap { public function run() { $logger = new Logger(); $order_service = new Order_Service( $logger ); add_action( 'init', function () use ( $order_service ) { // استفاده از $order_service } ); } } اینجا My_Plugin_Bootstrap نقش یک container خیلی ساده را دارد و وابستگیها را میسازد و تزریق میکند. چرا برای وردپرس مفید است؟ • راحتتر میشود کلاسها را جداگانه تست کرد 🧪 • برای جایگزین کردن implementation (مثلاً یک Logger جدید) فقط نقطه ساخت را عوض میکنی • کد کمتر به global و singletonهای سفتوسخت وابسته میشود نکته عملی برای پروژههای بزرگتر میتوان از containerهای آماده PHP مثل PHP-DI استفاده کرد، ولی در اکثر پلاگینهای وردپرسی همین container ساده با چند کلاس bootstrap کاملاً جواب میدهد. قدمبهقدم اگر وابستگیها را تزریق کنی، معماری پلاگین تمیزتر، قابلگسترشتر و حرفهایتر میشود 💪 🔖 #Wordpress #وردپرس #Dependency_Injection #Wordpress #PHP #Clean_Code #Architecture 👤 Developix 💎 Channel: @DevelopixWordpress0,92%
- 31 маяStrategy Pattern برای منطق تخفیف در پلاگینهای وردپرس 🎯 وقتی روی پلاگین فروشگاهی یا افزونه سفارشی برای WooCommerce کار میشود، منطق تخفیف معمولاً اولین جایی است که تبدیل به spaghetti code میشود 😅 یک روز فقط «کد تخفیف ساده» داریم، چند هفته بعد: • تخفیف مناسبتی (جمعه سیاه) • تخفیف بر اساس نقش کاربر (VIP، همکار، …) • تخفیف برای دستهبندی خاص محصول اگر همه اینها داخل یک if / else غولآسا پیادهسازی شود، نگهداریاش عذاب است. اینجا Strategy Pattern بهکمک میآید. ایده اصلی Strategy Pattern 🔧 منطق متغیر (مثلاً «چطور تخفیف را حساب کنیم») از بقیه کد جدا میشود و هر استراتژی در یک کلاس مستقل قرار میگیرد. کدی که قیمت را حساب میکند فقط با یک «اینترفیس» صحبت میکند، نه با جزئیات انواع تخفیف. ساختار ساده در PHP (کاملاً قابل استفاده در پلاگین وردپرس) <?php interface DiscountStrategy { public function calculate($price, $user, $cart): float; } class NoDiscount implements DiscountStrategy { public function calculate($price, $user, $cart): float { return $price; } } class VipUserDiscount implements DiscountStrategy { public function calculate($price, $user, $cart): float { if (in_array('vip', (array) $user->roles, true)) { return $price * 0.8; // 20% تخفیف } return $price; } } class BlackFridayDiscount implements DiscountStrategy { public function calculate($price, $user, $cart): float { return $price * 0.7; // 30% تخفیف } } class PriceCalculator { private DiscountStrategy $strategy; public function __construct(DiscountStrategy $strategy) { $this->strategy = $strategy; } public function finalPrice($price, $user, $cart): float { return $this->strategy->calculate($price, $user, $cart); } } در وردپرس میتوان این استراتژی را بر اساس تنظیمات پنل ادمین یا فیلد option انتخاب کرد و سپس مثلاً در هوک woocommerce_before_calculate_totals استفاده کرد. چند نکته کاربردی برای وردپرس 🧩 • هر Strategy را در فایل جدا (یا فولدر src/Discounts) نگهداری شود تا ساختار پروژه تمیز بماند. • استراتژی پیشفرض (مثل NoDiscount) همیشه تعریف شود تا اگر تنظیمات پلاگین خراب شد، سایت دچار خطای fatal نشود. • برای جلوگیری از Memory Leak یا لود بیمورد، فقط استراتژیهای لازم require یا autoload شوند. منبع برای مطالعه بیشتر Strategy Pattern - refactoring.guru پیادهسازی Strategy Pattern در منطق تخفیف، هم کد را خواناتر میکند هم افزودن کمپینهای جدید را تبدیل به یک کار تمیز و کمخطر میکند. از پروژه بعدی، منطق متغیر را در Strategy جدا شود و از نتیجهاش لذت برده شود 🚀 🔖 #Wordpress #وردپرس #Strategy_Pattern #Design_Pattern #WordPress #WooCommerce #PHP #Clean_Code 👤 Developix 💎 Channel: @DevelopixWordpress0,69%
- 4 апр.🇮🇷 مخزن داخلی WP Mirror این مخزن برای افرادی که دسترسی به اینترنت بینالمللی ندارند ایجاد شده و به راحتی از طریق اینترنت داخلی قابل دسترسی است. در حال حاضر شامل ۴۰۰ پلاگین اورجینال و رایگان از مخزن رسمی وردپرس است که بدون هیچگونه دستکاری و تغییر در اختیار شما قرار گرفته. به زودی پلاگینهای بیشتری به این مجموعه اضافه خواهد شد. برای دریافت آخرین آپدیتها به صورت رایگان، از لینک زیر استفاده کنید: http://wpexperts.ir مخزن به صورت هفتگی آپدیت میشود. 🔖 #Wordpress #وردپرس 👤 Mojtaba 💎 Channel: @DevelopixWordpress0,67%
- 15 июн.ساخت یک Custom Post Type برای «پورتفولیو» از اون چیزهاییه که فوراً وردپرسِ ساده رو تبدیل میکنه به یه سایت حرفهای 😎 فرض کن یه سایت شرکتی یا شخصی داری و میخوای نمونهکارها رو جدا از نوشتهها نشون بدی، با URL تمیز، آرشیو جدا و فیلدهای مخصوص خودش. اینجاست که Custom Post Type بهدرد میخوره. این کاریه که خود تیم وردپرس هم توی داکیومنت رسمی پیشنهاد میده: آموزش Register کردن Custom Post Type تو این مثال، یه CPT به اسم portfolio میسازیم که: • توی منوی Admin کنار «Posts» دیده میشه 🧭 • URL ش شبیه /portfolio/project-name باشه 🌐 • آرشیو داشته باشه (لیست همه نمونهکارها) • پشتیبانی از عنوان، ادیتور، عکس شاخص و دستهبندیهای خودش 📌 کجا کد رو بذاریم؟ بهترین حالت برای شروع: داخل فایل functions.php در قالب Child Theme خودت. (یا تمیزترش: ساختن یه پلاگین سادهی اختصاصی، ولی برای شروع همون functions.php اوکیه.) 📦 کد آماده برای ساخت Custom Post Type «Portfolio» function wp_channel_register_portfolio_cpt() { $labels = array( 'name' => 'Portfolio', 'singular_name' => 'Project', 'menu_name' => 'Portfolio', 'name_admin_bar' => 'Project', 'add_new' => 'Add New', 'add_new_item' => 'Add New Project', 'edit_item' => 'Edit Project', 'new_item' => 'New Project', 'view_item' => 'View Project', 'search_items' => 'Search Projects', 'not_found' => 'No projects found', 'not_found_in_trash' => 'No projects in Trash' ); $args = array( 'labels' => $labels, 'public' => true, 'has_archive' => true, 'rewrite' => array( 'slug' => 'portfolio' ), 'menu_position' => 5, 'menu_icon' => 'dashicons-portfolio', 'supports' => array( 'title', 'editor', 'thumbnail' ), 'show_in_rest' => true, ); register_post_type( 'portfolio', $args ); } add_action( 'init', 'wp_channel_register_portfolio_cpt' ); نکتهها 🛠 • show_in_rest => true باعث میشه این CPT توی Gutenberg و REST API هم قابل استفاده باشه؛ یعنی بعداً راحت میتونی با Blockهای اختصاصی یا Headless کار کنی. • اگر بعد از اضافه کردن کد، URL ها 404 دادن، کافیه یه بار بری به: Settings > Permalinks و بدون تغییر، روی Save بزنی تا rewrite rules ریفرش بشن. • میتونی برای این CPT یه Template اختصاصی هم بسازی؛ مثلاً فایل archive-portfolio.php برای لیست همه پروژهها، و single-portfolio.php برای صفحهی هر پروژه. استفادهی واقعی از این روش توی تقریباً هر سایت حرفهای وردپرسی دیده میشه: نمونهکار، دورهها، محصولات سفارشی، Event ها، Property ها و هر چیزی که «نوشتهی معمولی» نیست. امتحانش کن، یه دوتا Project تستی بساز و توی منوی اصلی سایت لینک آرشیو /portfolio/ رو بذار؛ خیلی زود میبینی ساختار سایتت چقدر تمیزتر و قابلمدیریتتر میشه ✨ اگر مفید بود، برای همکار برنامهنویس یا طراح وردپرسیت هم بفرست تا اون هم از Custom Post Type استفاده کنه 🚀 🔖 #Wordpress #وردپرس #WordPress #Custom_Post_Type #Portfolio #functions_php #CPT #register_post_type 👤 Developix 💎 Channel: @DevelopixWordpress0,51%
- 15 июл.⚡️ بهینهسازی سرعت وردپرس با WP Super Cache سرعت سایت وردپرسی مستقیماً روی سئو و تجربه کاربر تاثیر میگذاره. یکی از سادهترین و در عین حال حرفهایترین کارها، راهاندازی Page Cache با پلاگین معروف WP Super Cache ـه که توسط تیم رسمی WordPress.org توسعه داده میشه. ایدهٔ اصلی اینه که بهجای اجرای مداوم PHP و کوئریهای سنگین MySQL، نسخهی HTML استاتیک صفحات برای کاربر سرو میشه. این یعنی لود خیلی سریعتر، مخصوصاً روی هاستهای اشتراکی. ۱️⃣ نصب و فعالسازی پلاگین از بخش Plugins → Add New عبارت WP Super Cache رو جستوجو و نصب کن، بعد Activate. سپس به Settings → WP Super Cache برو. در تب Easy گزینهٔ Caching On رو انتخاب کن و Save Changes رو بزن. همین یک کار ساده میتونه برای خیلی از سایتها یک تفاوت محسوس ایجاد کنه. 🌱 ۲️⃣ فعالسازی حالت Expert برای کاربرهای جدیتر اگر دسترسی به فایل .htaccess داری و با سرور Apache کار میکنی، از تب Advanced میتونی حالت Expert رو فعال کنی. این کار باعث میشه کش در سطح وبسرور مدیریت بشه و درخواست حتی قبل از رسیدن به PHP پاسخ بگیره. در تب Advanced تیک گزینهٔ: Use mod_rewrite to serve cache files رو بزن و تنظیمات رو ذخیره کن. پلاگین خودش بهصورت خودکار کدهای لازم رو به .htaccess اضافه میکنه. نمونهای از این کد رو این پایین میبینی 👇 # BEGIN WPSuperCache <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_METHOD} !=POST RewriteCond %{QUERY_STRING} ="" RewriteCond %{HTTP_COOKIE} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$ RewriteCond %{REQUEST_URI} !^/wp-admin/.* RewriteCond %{REQUEST_URI} !^/wp-login.php RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}%{REQUEST_URI}index.html -f RewriteRule ^(.*)$ /wp-content/cache/supercache/%{HTTP_HOST}%{REQUEST_URI}index.html [L] </IfModule> # END WPSuperCache اگر هاست اجازهٔ ویرایش .htaccess رو نده، پلاگین پیام میده و میتونی این بخش رو دستی در روت وردپرس اضافه کنی. فقط حواست باشه قبل از هر تغییری یک بکاپ کوچک بگیری. 🧯 ۳️⃣ تنظیمات مفید برای دنیای واقعی 🔹 در تب Advanced حتماً این گزینهها رو چک کن: • Compress pages so they’re served more quickly to visitors → فعال کن تا Gzip روی فایلهای کش اعمال بشه. • Don’t cache pages for known users → فعال باشه تا وقتی لاگین هستی، نسخه کششده رو نبینی و راحتتر دیباگ کنی. • Clear all cache files when a post or page is published or updated → فعال باشه تا بعد از انتشار مطلب، کش قدیمی پاک بشه. 🔹 در تب Preload میتونی برای سایتهای شلوغ، Preload فعال کنی تا پلاگین بهصورت دورهای همه صفحات رو پیشکش کنه. این برای سایتهای پر ترافیک که تکیه زیادی روی سئو دارن، خیلی کاربردیه. ۴️⃣ تست سرعت بعد از فعالسازی بعد از تنظیم کش، با ابزارهایی مثل PageSpeed Insights یا GTmetrix سرعت قبل و بعد رو مقایسه کن. معمولاً کاهش First Byte Time و Fully Loaded Time رو خیلی واضح میشه دید. یک نکتهٔ کوچک: اگر روی سایت افزونههای Membership، WooCommerce یا هر چیزی که محتوای داینامیک per-user ارائه میده داری، حتماً تنظیمات عدم کش صفحات خاص (یا کوئری استرینگها) رو در WP Super Cache بررسی کن تا سبد خرید یا پنل کاربری اشتباه کش نشه. در نهایت، همین یک تنظیم نسبتا ساده میتونه حس «سنگینی» وردپرس رو تا حد زیاد از بین ببره. امروز روی یک سایت تست کن و نتیجه رو مقایسه کن ⚙️🚀 🔖 #Wordpress #وردپرس #WordPress #Performance #WP_Super_Cache #Cache #Speed #وردپرس #Optimization 👤 Developix 💎 Channel: @DevelopixWordpress0,48%
- 14 дек.без подписи0,42%
- 30 дек.الگوی Repository در پروژههای وردپرسی 🧩 یکی از Design Patternهایی که توی پروژههای متوسط و بزرگ وردپرسی خیلی کمک میکند، Repository Pattern است. ایدهاش ساده است 👇 بهجای اینکه منطق کوئریهای دیتابیس (WP_Query، get_posts، متاها و…) را وسط templateها و functionها پخش کنیم، همهٔ دسترسی به داده (مثلاً نوشتهها، محصولات، سفارشها) را در یک لایهی جدا به اسم Repository نگه میداریم. 🔹 مزیتها برای پروژه وردپرسی • تمیز شدن کدهای theme و plugin • قابلتست شدن (Unit Test راحتتر) • تغییر راحت منبع داده (مثلاً بعداً REST API یا headless) • جلوگیری از تکرار کوئریهای پیچیده در جاهای مختلف مثال ساده: PostRepository برای نوشتهها فرض کنید چند جا در سایت باید «نوشتههای ویژه» را بگیریم. بهجای تکرار WP_Query، یک Repository میسازیم: class PostRepository { public function getFeaturedPosts($limit = 5) { $args = [ 'post_type' => 'post', 'posts_per_page' => $limit, 'meta_key' => 'is_featured', 'meta_value' => '1', ]; return get_posts($args); } public function getByAuthor($authorId, $limit = 10) { $args = [ 'post_type' => 'post', 'posts_per_page' => $limit, 'author' => $authorId, ]; return get_posts($args); } } حالا در قالب یا plugin، بهجای نوشتن مستقیم WP_Query: $postRepo = new PostRepository(); $featured = $postRepo->getFeaturedPosts(3); کد template تمیزتر میشود و منطق دیتابیس در یک جا متمرکز است ✅ کاربرد در Pluginهای جدیتر برای Custom Post Type مثل product یا course هم میشود ProductRepository، CourseRepository ساخت و همهٔ کوئریهای خاص آن نوع داده را آنجا نوشت. این کار وقتی سایت بزرگ میشود و چند نفر روی آن کار میکنند، جلوی کلی Memory Leak ذهنی و گیجشدن را میگیرد 🙂 چند نکتهٔ تمیزنویسی • Repository فقط روی «داده» تمرکز کند، نه HTML render • اسم متدها معنایی باشد: findPublished() بهتر از get1() • منطق فیلترهای ثابت (مثلاً فقط post_status => 'publish') داخل Repository باشد برای مطالعهٔ بیشتر درباره Repository Pattern (در معماریهای PHP): martinfowler.com/eaaCatalog/repository.html استفاده از این الگو، مخصوصاً در theme و pluginهای تجاری وردپرس، ساختار پروژه را قابلگسترشتر و حرفهایتر میکند. کمکم از پروژههای کوچک شروع شود تا دستتان راه بیفتد 🚀 🔖 #Wordpress #وردپرس #Repository_Pattern #WordPress #PHP #Clean_Code #Design_Patterns 👤 Developix 💎 Channel: @DevelopixWordpress0,39%
- 10 мая 2025 г.без подписи0,39%
- 1 апр.🔁 ریدایرکت ۳۰۱ حرفهای در وردپرس (بدون خراب کردن سئو) خیلی وقتها توی سایت وردپرسی، آدرس یه نوشته یا صفحه عوض میشه: عوض کردن ساختار permalink، حذف یه دسته، انتقال از /blog/ به ریشه سایت و… اگه برای این آدرسهای قدیمی ریدایرکت درست تنظیم نشه، هم کاربر میره روی 404، هم سئو سایت ضربه میخوره. 😬 امروز یه آموزش کاملاً کاربردی برای مدیریت ریدایرکتها تو وردپرس، هم با پلاگین، هم با یه تکه کد سبک. منبع اصلی ایده و ساختار: Redirection plugin در مخزن رسمی و مستندات رسمی: wp_redirect() ۱️⃣ روش ساده: استفاده از پلاگین Redirection اگه دسترسی به نصب پلاگین داری و هاست معمولیه، این روش خیلی تمیز و امنه. – از منوی Plugins ← Add New – سرچ کن: Redirection (نویسنده: John Godley) – نصب و فعالسازی ✅ بعد از فعالسازی: – برو به: Tools ← Redirection – ویزارد اولیه رو رد کن تا جدولها ساخته بشه. حالا برای ساخت یه ریدایرکت ۳۰۱: – تو بخش "Add new redirection"، • فیلد Source URL: مثلا /old-page/ • فیلد Target URL: مثلا https://example.com/new-page/ • نوع ریدایرکت به صورت پیشفرض ۳۰۱ هست ("Redirections" group). از این به بعد هرکی بره /old-page/، خودکار میره روی /new-page/، بدون 404 و بدون افت سئو. 😎 ۲️⃣ روش دولوپری: ریدایرکت با کد در functions.php اگه پلاگین اضافه نمیخوای، یا روی یه theme اختصاصی کار میکنی، میتونی ریدایرکتهای خاص رو مستقیم با کد هندل کنی. این نمونه کد، اگه کاربر بیاد سراغ /old-page/، با ریدایرکت ۳۰۱ میفرستدش روی /new-page/: add_action( 'template_redirect', function () { // اگر در admin هستیم یا درخواست برای ajax هست، کاری نکن if ( is_admin() || wp_doing_ajax() ) { return; } $requested_path = trim( $_SERVER['REQUEST_URI'], '/' ); // آدرس قدیمی بدون دامنه if ( $requested_path === 'old-page' ) { wp_redirect( home_url( '/new-page/' ), 301 ); exit; } } ); چند نکته مهم از مستندات WordPress: • استفاده از هوک template_redirect برای ریدایرکت، استاندارد و امنه. • همیشه بعد از wp_redirect()، حتماً exit; بذار تا اسکریپت ادامه پیدا نکنه. • برای ساخت URL مقصد، از home_url() استفاده کن تا روی لوکال، استیجینگ و پروداکشن درست کار کنه. کِی پلاگین، کِی کد؟ 🤔 • پلاگین Redirection عالیه وقتی: – ریدایرکت زیاد داری و میخوای UI راحت برای مدیریت داشته باشی. – کسی که سایت رو مدیریت میکنه لزوماً دولوپر نیست. • کد در functions.php یا plugin اختصاصی بهتره وقتی: – پروژه کوچیکه و چند تا ریدایرکت ثابت داری. – روی Performance خیلی حساسی و نمیخوای پلاگین اضافه لود بشه. یه ریدایرکت ۳۰۱ درست، هم کاربر رو خوشحال نگه میداره، هم اعتبار سئوی لینکهای قدیمی رو حفظ میکنه. 🔧 اگه تو پروژههات آدرس عوض میشه، از همین امروز یکی از این دو روش رو روی سایت تست کن و نتیجۀ 404 کمتر رو توی Google Search Console ببین. 🚀 🔖 #Wordpress #وردپرس #WordPress #Redirect #وردپرس #SEO #Redirection_plugin #functions_php 👤 Developix 💎 Channel: @DevelopixWordpress0,29%
- 16 апр.🛡 غیرفعال کردن ویرایش فایل های قالب و پلاگین از داشبورد خیلی وقتها روی سایت وردپرسی چند نفر دسترسی Administrator دارند یا احتمال هک شدن پنل وجود دارد. یکی از اولین کارهای امنیتی این است که ویرایشگر داخلی فایل ها در داشبورد وردپرس غیرفعال شود تا کسی نتواند از طریق Appearance → Theme File Editor یا Plugin File Editor کد مخرب اضافه کند. 🧨 فقط کافی است این خط را داخل فایل wp-config.php (قبل از خط «That's all, stop editing!») اضافه شود: define( 'DISALLOW_FILE_EDIT', true ); از این به بعد منوی ویرایشگر قالب و پلاگین از داشبورد ناپدید میشود و حتی اگر کسی به پنل ادمین برسد، دیگر نمیتواند به راحتی فایل های PHP را از داخل وردپرس ویرایش کند. 🔒 این کار جای بکاپ، محدودیت لاگین یا فایروال را نمیگیرد، اما یک لایه امنیتی ساده و کمهزینه است که روی هر سایت پروداشن وردپرسی باید فعال باشد. 🚀 مرجع رسمی: developer.wordpress.org 🔖 #Wordpress #وردپرس #WordPress #Security #wp_config #DISALLOW_FILE_EDIT #Hardening 👤 Developix 💎 Channel: @DevelopixWordpress0,28%