[WordPress] Jak stworzyć własną wtyczkę?
Tworzenie własnej wtyczki do WordPressa jest dość proste. System ten oferuje dość spore i dobrze udokumentowane API, z którym trzeba się zapoznać przed rozpoczęciem pracy nad wtyczką.
Przed rozpoczęciem kodowania zapoznaj się z Action Reference i Filter Reference. Filtry i akcje są podstawą rozbudowy funkcjonalności WordPressa bez konieczności ingerencji w pliki systemowe.
Przed utworzeniem lub pobraniem jakiejś wtyczki zastanów się czy jej funkcjonalności nie można stworzyć poprzez funkcję w pliku functions.php, bo jeśli tak to po co obciążać WordPressa dołączaniem kolejnych zbędnych plików?
Nazwa pliku wtyczki
Przed rozpoczęciem tworzenia wtyczki utwórz katalog z jej nazwą w katalogu /plugins. Nazwa katalogu powinna odzwierciedlać nazwę wtyczki. Jeśli Twoja wtyczka będzie składała się tylko z jednego pliku PHP nie musisz tworzyć dla niej katalogu, a bezpośrednio tworzysz plik PHP wtyczki w katalogu /plugins. Podobnie jak w przypadku nazwy katalogu, nazwa pliku PHP powinna odzwierciedlać nazwę wtyczki.
Na potrzeby niniejszego wpisu stworzymy wtyczkę dodającą tagi meta description i keywords na stronie postu każdego typu, a nazwa pluginu to Simple Meta Tags. Tworzymy więc plik simple-meta-tags.php.
Nagłówek
Nagłówek pliku wtyczki to zwykły wieloliniowy komentarz PHP. Nagłówek taki może zawierać oprócz nazwy wtyczki informacje o autorze, wersji, licencji oraz kilka innych (opcjonalnych). Wymaganym wierszem jest Plugin Name czyli nazwa wtyczki. W tej wtyczce dodamy jeszcze kilka innych wierszy z informacjami o niej:
<?php
/**
* Plugin Name: Simple Meta Tags
* Description: Dodaje tagi meta description i keywords do postów.
* Version: 1.0
* Author: ukodowani.pl
* Author URI: https://www.ukodowani.pl
* License: GPL2
*/
Oprócz nazwy wtyczki dodano jeszcze wiersze: opis, wersja, autor, strona autora, licencja i adres licencji.
Właściwy kod wtyczki
Teraz utworzymy klasę MetaTags z metodami: add_meta_tags, update, meta_tags_fields oraz add_meta_tags_meta_box.
class MetaTags {
public function add_meta_tags() {
global $post;
if(is_singular()) {
$meta_description = get_metadata('post', $post->ID, 'meta_description', true);
$meta_keywords = get_metadata('post', $post->ID, 'meta_keywords', true);
if($meta_description != '') {
echo '<meta name="description" content="' . $meta_description . '" />' . "\n";
}
if($meta_keywords != '') {
echo '<meta name="keywords" content="' . $meta_keywords . '" />' . "\n";
}
}
}
public function update($post_id) {
if(!current_user_can('edit_post', $post_id)) return;
if(wp_is_post_revision($post_id)) return;
$meta_description = htmlentities($_POST['meta_description'], ENT_COMPAT | ENT_HTML401, 'UTF-8');
$meta_keywords = htmlentities($_POST['meta_keywords'], ENT_COMPAT | ENT_HTML401, 'UTF-8');
if(!empty($_POST['meta_description'])) {
update_metadata('post', $post_id, 'meta_description', $meta_description);
}
else delete_metadata('post', $post_id, 'meta_description');
if(!empty($_POST['meta_keywords'])) {
update_metadata('post', $post_id, 'meta_keywords', $meta_keywords);
}
else delete_metadata('post', $post_id, 'meta_keywords');
}
public function meta_tags_fields($post) {
$meta_description = get_metadata('post', $post->ID, 'meta_description', true);
$meta_keywords = get_metadata('post', $post->ID, 'meta_keywords', true);
echo '<p><label for="meta-description"><input type="text" name="meta_description" value="' . $meta_description . '" id="meta-description" placeholder="Opis..." style="width:100%;" /></label></p>';
echo '<p><label for="meta-keywords"><input type="text" name="meta_keywords" value="' . $meta_keywords . '" id="meta-keywords" placeholder="Słowa kluczowe..." style="width:100%;" /></label></p>';
}
public function add_meta_tags_meta_box() {
add_meta_box('meta_tags', 'Tagi meta', [$this, 'meta_tags_fields'], '', 'side', 'high');
}
}
Zarejestrowanie metod dla akcji
Pozostało jeszcze tylko utworzyć obiekt klasy MetaTags i zarejestrować wywołanie metod przy akcjach:
$meta_tags = new MetaTags();
add_action('wp_head', [$meta_tags, 'add_meta_tags'], 1);
add_action('save_post', [$meta_tags, 'update']);
add_action('add_meta_boxes', [$meta_tags, 'add_meta_tags_meta_box']);
To wszystko, wtyczka gotowa. Opiszę teraz pokrótce jakie zadania pełnią zdefiniowane metody:
- Metoda add_meta_tags wywoływana przez akcję wp_head ma za zadanie wyświetlić tagi meta description i keywords na stronie postu każdego typu czyli post, strony i inne. Tagi te zostaną dodane do sekcji head strony tylko wtedy, gdy zostaną uzupełnione.
- Metoda update ma za zadanie zaktualizować wartości dla tagów description i keywords, czyli po prostu aktualizujemy metadane dla danego postu funkcją API update_metadata.
- W funkcji meta_tags_fields pobieramy i wyświetlamy wartości naszych tagów meta dla potrzeb edycji w panelu. Funkcja ta będzie użyta jako callback w funkcji add_meta_box.
- Funkcja add_meta_tags_meta_box dodaje box na stronie edycji posta z polami do edycji naszych dwóch tagów. Funkcja ta wywołuje funkcję API add_meta_box, która ma za zadanie dodać taki box na stronie edycji posta w pasku po prawej stronie.
Komentarze
Prześlij komentarz
Dzięki za komentarz!