Avoin lähdekoodi · Ata
Lisää tehoa WordPress-lisäosaasi.
MVC-S-rakenteella.
ATA auttaa WordPress-lisäosien kehittäjiä pitämään kasvavat koodikannat järjestyksessä ja ylläpidettävinä MVC-suunnittelumallin avulla.
WordPress-lisäosien kehittäjille
Kaikelle oma kansionsa.
ATA antaa jokaiselle lisäosalle saman ennustettavan rakenteen, joten kasvavat koodikannat pysyvät järjestyksessä ja ylläpidettävinä.
ATA Folder STRUCTURE
your-plugin-name/
├── app/
│ ├── apis/ # REST API endpoint classes
│ ├── controllers/ # Controller classes
│ ├── helpers/ # Global helper functions
│ ├── models/ # Data logic (database interaction)
│ │ └── structures/ # Optional: DTOs/data structure classes
│ ├── routes/ # API and custom URL definitions
│ ├── services/ # Business logic layer
│ └── views/ # View files (HTML/PHP templates)
│
├── base/ # Base classes your app classes extend
├── config/ # Plugin-wide configuration
├── constants/ # Custom constant definitions
├── inc/ # Bootstrapping and initialization files
├── vendor/ # Composer dependencies (includes the core ATA framework)
│
└── your-plugin-name.php # The main plugin entry file
Atan perusperiaatteet.
Rakenne valmiina
ATA tarjoaa valmiin hakemistorakenteen, joka erottaa lisäosasi eri osat loogisesti toisistaan.
Olio-ohjelmointi edellä
Se kannustaa kirjoittamaan koodin luokkiin proseduraalisten funktioiden sijaan, mikä parantaa koodin uudelleenkäytettävyyttä ja järjestystä.
Selkeä vastuunjako
Se toteuttaa muunnelman MVC-mallista, jotta logiikka-, data- ja esityskerrokset pysyvät erillään.
Yksinkertaistettu reititys
ATA:ssa on sisäänrakennettu reititin, jolla omien REST API -päätepisteiden tai omien URL-osoitteiden rekisteröinti on yksinkertaista ja deklaratiivista.
Keskeiset erot
Mikä on MVC-S?
ATA suosii muunnelmaa Model-View-Controller (MVC) -mallista. Kutsumme sitä nimellä MVC-S (Model-View-Controller-Services).
Controller (keskusmoottori)
Controller on lisäosasi toiminnan ydin. Se käsittelee saapuvat pyynnöt, rekisteröi kaikki WordPressin hookit ja filtterit sekä ohjaa sovelluksen kulkua. Yksinkertaisissa lisäosissa Controller voi hoitaa kaiken logiikan ja datan käsittelyn suoraan. Monimutkaisemmissa sovelluksissa siitä tulee orkestroija: se kutsuu Serviceä liiketoimintalogiikkaa varten tai Modelia dataa varten ja välittää tulokset Viewlle renderöitäväksi.
View (esityskerros)
View on valinnainen kerros HTML-tulosteen tuottamiseen. Se vastaanottaa datan Controllerilta ja renderöi sen. Viewssä pitäisi olla mahdollisimman vähän PHP-logiikkaa, vain sille annetun datan näyttäminen.
Model (datakerros)
Modelin ainoa tehtävä on suora vuorovaikutus tietokannan kanssa. Model-luokan sisällä pääset WordPressin tietokantaolioon käsiksi kautta $this->db (esim. $this->db->get_results(...)). Tämä kerros on valinnainen: jos lisäosasi ei käytä tietokantaa, et tarvitse sitä.
Service (logiikkakerros)
Service-kerros on valinnainen mutta suositeltu paikka lisäosasi keskeiselle liiketoimintalogiikalle. Kun logiikka käy Controllerille liian monimutkaiseksi, siirrä se Serviceen. Näin Controllerit pysyvät kevyinä ja keskittyvät pyyntöjen käsittelyyn.
Esimerkkilisäosa
Polylang RestAPI Helper
Lisäosa polylang-restapi-helper on täydellinen, tiivis esimerkki ATA-kehyksestä.
Näin teet WordPress-lisäosastasi ATA MVC -lisäosan
Dokumentaatio
ATA käyttöön lisäosassasi, nopeasti ja helposti
Lisäosan elinkaari & pää-Controller
Jokaista ATA-lisäosaa hallitsee keskitetty juuritason Controller. Tämä pää-Controller on kaiken lisäosan toiminnallisuuden sisääntulopiste ja vastaa lisäosan elinkaaresta.
1. Lisäosan päätiedosto (your-plugin-name.php) Tämä tiedosto on hyvin pelkistetty. Sen ainoat tehtävät ovat määritellä välttämättömät vakiot, ladata ATA-kehys ja luoda pää-Controllerisi instanssi.
// in your-plugin-name.php
namespace YourPluginNamespace;
// ... define constants ...
// Load the framework and all its dependencies
require_once PLUGIN_PATH . '/inc/main.php';
// Instantiate the one and only root controller
$my_plugin = new MainController();
// Hook into WordPress's activation/deactivation events
register_activation_hook(PLUGIN_FILE, [$my_plugin, 'activate']);
register_deactivation_hook(PLUGIN_FILE, [$my_plugin, 'deactivate']);
2. Pää-Controller (app/controllers/main-controller.php) Tämä Controller sisältää aktivointi- ja deaktivointilogiikan ja, mikä tärkeintä, lataa kaikki muut Controllerit. Täällä voit ladata ominaisuuksia ehdollisesti sen mukaan, ovatko muut lisäosat aktiivisina, se säästää muistia ja ehkäisee virheitä.
// in app/controllers/main-controller.php
namespace YourPluginNamespace;
class MainController extends Controller
{
public function __construct()
{
parent::__construct();
$this->load_features();
}
// Load other controllers for specific features
private function load_features()
{
// Always load the admin UI and asset controllers
(new AdminUiController())->main();
(new AssetsController())->main();
// **Conditionally load features**
// Only load the WooCommerce compatibility layer if WooCommerce is active
if (is_plugin_active('woocommerce/woocommerce.php')) {
(new WooCommerceController())->main();
}
}
// Logic for when the plugin is activated (e.g., create DB tables)
public function activate()
{
// ... your activation code ...
}
// Logic for when the plugin is deactivated (e.g., remove DB tables)
public function deactivate()
{
// ... your deactivation code ...
}
}
Sivun tai välilehden lisääminen WordPressin hallintapaneeliin
ATA tarjoaa sujuvan rajapinnan, jolla luot helposti hallintasivuja useilla välilehdillä. Tätä hallitaan Controllerista.
// in app/controllers/admin-ui-controller.php
namespace YourPluginNamespace;
class AdminUiController extends Controller
{
public function main()
{
$this->add_wp_admin_pages();
}
private function add_wp_admin_pages()
{
// Create a top-level page titled "My Plugin"
$this->admin_page('My Plugin')
// Only users who can 'manage_options' can see it
->permission('manage_options')
// Add a "Dashboard" tab (calls the 'dashboard_page' method)
->add_tab('Dashboard', 'dashboard_page')
// Add a "Settings" tab (calls the 'settings_page' method)
->add_tab('Settings', 'settings_page')
// Register the page and all its tabs
->register();
}
// This method is called when the 'Dashboard' tab is active
public function dashboard_page()
{
$this->view = 'dashboard'; // Renders views/dashboard-view.php
}
// This method is called when the 'Settings' tab is active
public function settings_page()
{
$this->view = 'settings'; // Renders views/settings-view.php
}
}
Kytkeytyminen WordPress-hookiin (Action)
ATA:n perus-Controllerissa on kätevä on() -apumetodi action-hookien rekisteröintiin. Controllerisi konstruktori tai main() -metodi on ihanteellinen paikka rekisteröidä kaikki hookit.
// in app/controllers/footer-message-controller.php
namespace YourPluginNamespace;
class FooterMessageController extends Controller
{
public function main()
{
// Hook into 'wp_footer' to call the 'add_message' method
$this->on('wp_footer', 'add_message');
}
public function add_message()
{
echo "";
}
}
WordPress-filttereiden käyttö
Actionien tapaan voit muokata dataa filter() -apumetodilla.
// in app/controllers/content-controller.php
namespace YourPluginNamespace;
class ContentController extends Controller
{
public function main()
{
// Hook into 'the_content' to modify post content
$this->filter('the_content', 'add_author_bio');
}
public function add_author_bio($content)
{
if (is_single() && in_the_loop() && is_main_query()) {
$author_bio = '';
return $content . $author_bio;
}
return $content;
}
}
WordPress REST API -päätepisteen lisääminen
Vaihe 1: Rekisteröi reitti tiedostossa app/routes/main-routes.php. Näin WordPress tietää, että URL-osoitteesi on olemassa ja mikä metodi sen käsittelee.
// in app/routes/main-routes.php
namespace YourPluginNamespace;
$ata_router->api_version('my-plugin/v1');
$ata_router->api_method('GET')->api('/products')->call('ProductsApi::get_all_products');
Vaihe 2: Luo API-luokka hakemistoon app/apis/ päätepisteen logiikkaa varten.
// in app/apis/products-api.php
namespace YourPluginNamespace;
class ProductsApi extends Api {
public function get_all_products() {
// ... logic to get products ...
return $this->send_success('Products retrieved.', ['products' => '...']);
}
}
Miten reititys toimii?
Reititystiedosto (app/routes/main-routes.php) on tehokas mutta valinnainen ominaisuus. Sen ainoa tehtävä on toimia kytkentäpöytänä, joka kertoo WordPressille, miten tietyt omat URL-osoitteet käsitellään. Jos lisäosasi ei tarvitse omia URL-osoitteita tai REST APIa, sinun ei tarvitse käyttää sitä.
- REST API -rajapinnoille: Käytä
api()-metodia. Se rekisteröi uuden päätepisteen polun/wp-json/alle.// Registers: example.com/wp-json/my-plugin/v1/orders $ata_router->api_version('my-plugin/v1'); $ata_router->api('/orders')->call('MyOrdersApi::get_orders'); - Omille front-end-URL-osoitteille: Käytä
page()-metodia. Se luo virtuaalisen sivun ilman WordPress-sivua.// Registers: example.com/my-custom-url/ $ata_router->page('/my-custom-url')->call('MyPageController::show_page');
Mihin valinnaisia ydinhakemistoja käytetään?
app/views
Tässä hakemistossa ovat HTML-pohjasi. Se on tarpeen vain, jos lisäosasi tuottaa käyttöliittymän, kuten hallinnan asetussivun tai oman front-end-sivun. Lisäosissa, jotka tarjoavat vain taustatoimintoja tai REST APIn, ei todennäköisesti ole views -hakemistoa.
models/structures (DTO:t)
Tämä hakemisto on tarkoitettu tiedonsiirto-olioille (Data Transfer Objects, DTO). DTO on yksinkertainen luokka, joka määrittelee välitettävän datan muodon. Hakemisto on valinnainen, eikä moni lisäosa välttämättä tarvitse sitä. Siitä on eniten hyötyä, kun haluat pakottaa tiukan tietorakenteen, etenkin ulkoisen API:n kanssa keskusteltaessa.
Sinun menestystarinasi voi olla seuraava.
Kysyttävää? Autamme sinua tekemään oikean ratkaisun.