🥰Sử dụng namespace trong plugin ở trong themes Premium Addons for Elementor (ok)

Chu ý: Cách hoạt động của Widget trong Elementor là

Sử dụng hook để đăng kýhủy đăng ký

require_once WPS_HIDE_LOGIN_DIR . 'templates/premium-template-tags-custom.php';
add_action('elementor/widgets/register', function($widgets_manager){
  $widgets_manager->unregister('premium-addon-blog');
});
add_action('elementor/widgets/register', function($widgets_manager){
  require_once WPS_HIDE_LOGIN_DIR . 'widgets/premium-blog-custom.php';
  $widgets_manager->register(new PremiumAddons\Widgets\Premium_Blog_Custom());
});

Phân tích luồng

  1. premium-addons-for-elementor\premium-addons-for-elementor.php

  1. wp-content\plugins\premium-addons-for-elementor\includes\class-pa-core.php

  1. premium-addons-for-elementor\includes\addons-integration.php

  1. premium-addons-for-elementor\includes\helper-functions.php

  1. premium-addons-for-elementor\includes\helpers\widget-class-map.php

Bây giờ mục đích thay đổi Premium_Blog để hiển thị ngoài Front-End

Cách làm

  1. wp-content\themes\masterstudy-child\functions.php

masterstudy-child\premium-template-tags-custom.php chỉnh sửa từ premium-addons-for-elementor\includes\premium-template-tags.php

masterstudy-child\premium-blog-custom.php chỉnh sửa từ premium-addons-for-elementor\widgets\premium-blog.php

Kết quả

masterstudy-child\functions.php

wp-content\themes\masterstudy-child\premium-blog-custom.php

wp-content\themes\masterstudy-child\premium-template-tags-custom.php

Có thể tạo file trong theme và sử dụng namespace PremiumAddons\Includes;, nhưng không nên làm vậy vì dễ gây xung đột với plugin. Mình giải thích rõ hơn:


1. Về mặt kỹ thuật: Có thể làm được

Trong PHP, namespace chỉ là không gian tên logic, không phụ thuộc file nằm ở plugin hay theme.

Ví dụ bạn tạo file trong theme:

Sau đó load file trong functions.php:

→ PHP vẫn hiểu class nằm trong namespace:


2. Nhưng trong thực tế không nên làm

Plugin Premium Addons for Elementor đã có namespace:

Nếu bạn tạo class/function cùng namespace thì có thể gặp:

❌ Lỗi redeclare class

❌ Plugin update sẽ phá code

Plugin update có thể thay đổi cấu trúc namespace.

❌ Khó maintain


3. Cách đúng nên làm

Cách 1: Tạo namespace riêng trong theme (khuyên dùng)


Cách 2: Gọi class của plugin bằng namespace của nó

Ví dụ plugin có class:

Bạn dùng:


Cách 3: Hook vào plugin

WordPress thường hook:


4. Khi nào mới dùng cùng namespace

Chỉ khi bạn:

  • Override class của plugin

  • Extend class của plugin

Ví dụ:


Kết luận

  • Có thể tạo file trong theme dùng namespace PremiumAddons\Includes

  • Nhưng không nên vì dễ xung đột plugin

  • Nên dùng namespace riêng của theme và import class plugin bằng use


💡 Nếu bạn nói rõ mục đích:

  • muốn custom widget Premium Addons

  • override function plugin

  • hay gọi class của Premium Addons

mình có thể chỉ cách chuẩn WordPress + Elementor dev dùng (chuẩn 100%).

override function plugin

Việc override function trong plugin WordPress (ví dụ plugin Premium Addons for Elementor) phụ thuộc vào plugin có cho phép override hay không. Không phải function nào cũng override được. Có 3 cách phổ biến:


1. Override bằng Hook / Filter (Cách chuẩn nhất)

Nếu plugin viết đúng chuẩn WordPress thì sẽ có apply_filters hoặc do_action.

Ví dụ trong plugin:

Trong theme functions.php bạn override:

✔ Không sửa plugin ✔ Không bị mất khi update plugin


2. Override bằng cách load file trước plugin (Chỉ dùng khi cần)

Nếu plugin có function dạng:

Bạn có thể override trước:

Nhưng chỉ hoạt động nếu plugin viết kiểu này:

Nếu plugin không có function_exists thì không override được.


3. Override Class (phổ biến với Premium Addons)

Plugin Elementor thường viết dạng class + namespace.

Ví dụ plugin:

Bạn không override trực tiếp, mà extend class:

Sau đó dùng class của bạn thay vì class plugin.


4. Override widget Elementor (trường hợp Premium Addons)

Cách đúng nhất là:

1️⃣ Unregister widget plugin

2️⃣ Register widget mới


5. Không nên làm (dễ lỗi)

❌ Copy file plugin sang theme ❌ Dùng cùng namespace plugin

→ dễ gây:


Ví dụ thực tế Premium Addons

Ví dụ override helper:

Bạn nên viết:


Nếu bạn gửi mình:

  • function cần override

  • hoặc file plugin

Ví dụ:

Mình có thể chỉ bạn cách override chuẩn 100% mà không sửa plugin (dev Elementor thường dùng cách này).

Đã làm wp-content\themes\astra-child\functions.php

wp-content\themes\astra-child\elementor\widgets\custom-testimonial.php

wp-content\plugins\premium-addons-for-elementor\widgets\premium-testimonials.php

Để custom widget của Premium Addons for Elementor, bạn không nên sửa trực tiếp plugin. Cách đúng là:

Unregister widget của plugin → tạo widget mới → extend widget gốc → chỉnh sửa

Cách này an toàn khi plugin update.


1. Tìm class widget của Premium Addons

Ví dụ widget Testimonial của plugin nằm trong:

class dạng:


2. Tạo file widget custom trong theme

Ví dụ:

Bạn có thể override các function:


3. Unregister widget gốc

Trong functions.php:

Tên widget lấy từ:


4. Register widget mới


5. Override function render

Ví dụ chỉnh HTML:


6. Nếu chỉ muốn sửa HTML nhẹ

Bạn có thể override:

và gọi parent:


7. Cấu trúc chuẩn khi custom Elementor widget


8. Tips quan trọng

Luôn check plugin đã load:


9. Ví dụ hoàn chỉnh


💡 Pro tip (rất quan trọng với Premium Addons)

Plugin này cho phép extend widget rất dễ vì hầu hết widget đều là:


✅ Nếu bạn muốn, mình có thể chỉ thêm:

  • cách custom Premium Addons Testimonial đẹp hơn

  • cách move Testimonial từ About sang Home (không cần duplicate widget)

  • cách override CSS + render widget Premium Addons chuẩn dev Elementor

Mình cũng có thể viết luôn 1 ví dụ custom widget Premium Addons hoàn chỉnh ~150 dòng code cho bạn dùng trực tiếp.

Last updated