W rozwoju WordPress sukces lub porażka w tworzeniu pluginów często zależy od umiejętnego wykorzystania potężnych funkcji dostępnych w samym jądrze WordPress. W tym rozdziale skupimy się na kilku najważniejszych, najczęściej używanych API pluginów, dokładnie analizując ich zastosowania, parametry i metody, aby pomóc programistom w tworzeniu stabilnych, wydajnych i łatwych w utrzymaniu pluginów.
Core actions and filter hook functions
Architektura pluginów w WordPress bazuje na systemie “haków” („hooks”), który umożliwia programistom włączenie własnych funkcji w określone momenty wykonywania kodu podstawowego. Zrozumienie i poprawne używanie tych funkcji jest pierwszym krokiem w rozwoju pluginów.
Montowanie własnych funkcji w procesy core WordPress
Funkcje wtyczek muszą zostać aktywowane w odpowiednim momencie, a to zwykle jest realizowane za pomocą mechanizmu “akcji” w WordPress.add_action Funkcje są mostem łączącym pluginy z głównym cyklem życia aplikacji (lifecycle), umożliwiając programistom wykonywanie własnego kodu w momencie wystąpienia określonych zdarzeń. remove_action Służy do usunięcia zainstalowanych akcji (działaniów).
Polecamy lekturę. Przewodnik po rozwoju pluginów dla WordPressa: Stworzenie swojego pierwszego pluginu od zera。
Ogólna gramatika jest następująca:
add_action( string $hook_name, callable $callback, int $priority = 10, int $accepted_args = 1 ) Na przykład, po opublikowaniu treści artykułu można wysłać wiadomość e-mail z powiadomieniem:
function send_post_notification( $post_id ) {
// 发送邮件的逻辑
}
add_action( 'publish_post', 'send_post_notification' ); add_action Parametry priorytetu decydują o kolejności wykonywania kilku callback-ów na tym samym hooku – im mniejszy numer, tym wcześniej zostanie wykonywany odpowiedni callback. To niezbyt istotne dla prostych pluginów, ale jest kluczowe w przypadku złożonych aplikacji, gdzie konieczne jest kontrolowanie kolejności wykonywania operacji.
Modyfikacja danych przekazywanych do innych funkcji lub wydawanych wyników
Poza wykonywaniem kodu w określonych momencach, programiści często muszą modyfikować dane generowane przez inne funkcje, a w takich przypadkach konieczne jest użycie hooków filtrów.add_filter Funkcja służy do dodawania korekcyjnych procedur („filter callbacks”) i przyjmuje dane wejściowe. Po ich modyfikacji musi zwrócić nowe dane.
Na przykład: zmiana ostatniego znaku w nagłówkach wszystkich artykułów.
Polecamy lekturę. Opanuj te funkcje i filtry dostępne w WooCommerce, aby dostosować funkcje swojego e-sklepu.。
function modify_post_title( $title ) {
return $title . ' - 我的网站';
}
add_filter( 'the_title', 'modify_post_title' ); 与 add_action Podobnie…add_filter Można też ustawić priorytety oraz liczbę parametrów. Filtry stanowią kluczową podstawę dla wysokiej dostosowalności funkcji w WordPress.
Funkcje do operacji na bazie danych i zarządzania opcjami
Dodatki często wymagają przechowywania danych na długoterminowe. WordPress oferuje hierarchiczny interfejs API do zarządzania danymi, od prostych opcji konfiguracji witryny po operacje na zdefiniowanych tabelach bazy danych.
Bezpieczne przechowywanie i pobieranie ustawień pluginów
W przypadku pluginów, które wymagają zapisu ustawień użytkownika, konfiguracyjne opcje muszą być przechowywane w bazie danych WordPress.add_option、get_option 和 update_option Tworzą podstawę zarządzania danymi. Te funkcje operują na… wp_options Tabele są przydatne do przechowywania danych w formie wzorców „klucz–wartość”, które są względnie proste w strukturze.
Najpierw można użyć… add_option Aby dodać początkową wartość… wp_options Ta funkcja wpisuje dane tylko wtedy, gdy dane opcje nie istnieją.
add_option( 'my_plugin_api_key', '', '', 'no' ); // ‘no’表示非自动加载 Aby uzyskać wartość opcji, należy użyć odpowiedniej metody lub funkcji dostępnej w języku programowania, zależnie od platformy i frameworku, na którym jest tworzony program. get_optionZaleca się zawsze podawanie standardowych (domyślonych) wartości.
$api_key = get_option( 'my_plugin_api_key', '' ); // 第二个参数为默认值 Aby aktualizować wartości opcji, należy użyć… update_optionJeśli opcja nie istnieje, zostanie automatycznie stworzona.
Polecamy lekturę. Pełny przewodnik po tworzeniu wtyczek do WordPressa: od zera do profesjonalnego rozszerzenia.。
update_option( 'my_plugin_api_key', 'new_secret_key_123' ); Dla danych złożonych, takich jak tabele czy obiekty, które wymagają przechowywania, te funkcje automatycznie wykonywają operacje serializacji i deserializacji.
Wykonanie własnego zapytania do bazy danych
Gdy plugin wymaga przechowywania danych relacyjnych lub logów, tworzenie własnych tabel w bazie danych jest zwykle lepszym rozwiązaniem. W tym przypadku konieczne jest bezpośrednie interakcje z klasami abstrakcyjnymi bazy danych WordPress. $wpdb Interakcja umożliwia bezpieczny i standardowy dostęp do bazy danych.
Najpierw utwórz tabelę w zdarzeniu aktywacji pluginu. Upewnij się, że używasz właśnie tej funkcji. dbDelta Funkcja umożliwia bezpieczne tworzenie lub aktualizowanie struktury tabeli. Porównuje różnice pomiędzy obecną strukturą tabeli a zamierzoną strukturą i inteligentnie aplikuje zmiany.
global $wpdb;
$table_name = $wpdb->prefix . 'my_plugin_orders';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id bigint(20) NOT NULL AUTO_INCREMENT,
customer_email varchar(100) NOT NULL,
amount decimal(10,2) NOT NULL,
order_date datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id),
KEY customer_email (customer_email)
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql ); Podczas wykonywania zapytów dotyczących danych konieczne jest użycie określonych narzędzi lub metod. $wpdb->prepare Kluczowym elementem zapobiegania atakom typu SQL injection jest przygotowanie zdań za pomocą określonych metod.
$results = $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}my_plugin_orders WHERE order_date > %s AND amount > %f",
'2026-01-01 00:00:00',
100.00
)
); Funkcja generowania i wyświetlania treści
Dodatki mogą pracować w tle, ale co więcej, są w stanie generować treści dla odwiedzających. WordPress oferuje potężne funkcje, które umożliwiają bezpieczne i elastyczne wyświetlanie treści w formacie HTML, obsługę krótkich kodów oraz zarządzanie statycznymi zasobami.
Wkładanie dynamicznego zawartości w artykuły i strony internetowe
Krótkie kody umożliwiają użytkownikom wstawianie dynamicznego zawartości w artykułach i stronach za pomocą prostych tagów, co stanowi kluczową funkcję poprawiającą wygodę obsługi pluginów. add_shortcode Możesz łatwo tworzyć własne krótkie fragmenty kodu („short codes”).
add_shortcode Funkcja przyjmuje dwa parametry: krótki kod identyfikujący element strony oraz funkcję obsługującą ten element. Funkcja obsługująca musi zwrócić zawartość w formacie HTML, a nie wyświetlić ją bezpośrednio – to odpowiada zasadzie “pierw pobierz, potem renderuj” stosowanej w WordPress.
add_shortcode( 'recent_posts', 'my_plugin_render_recent_posts' );
function my_plugin_render_recent_posts( $atts ) {
// 解析属性,设置默认值
$attributes = shortcode_atts( array(
'count' => 5,
'category' => ''
), $atts );
// 根据属性查询文章逻辑...
$output = '<ul class="recent-posts">';
// ... 生成列表项
$output .= '</ul>';
return $output;
} Użytkownik musi tylko wpisać tekst w edytorze. [recent_posts count="3"] Wtedy zostanie wyświetlony list ostatnich artykułów.
Bezpieczne wyświetlenie wartości zmiennej w HTML
Gdy plugin musi wyświetlić dane z zmiennych na stronie (np. tekst uzyskany z bazy danych lub ustawione wartości), wystarczy je użyć bezpośrednio. echo Połączenie różnych ciągów tekstowych może stanowić ryzyko ataku typu XSS (Cross-Site Scripting). WordPress oferuje specjalne funkcje do escapeowania znaków, aby zapewnić bezpieczeństwo wyświetlanych danych.
对于在 HTML 标签属性内输出,使用 esc_attr Funkcja:
echo '<input type="text" value="' . esc_attr( get_option( 'site_title' ) ) . '">'; 对于在 HTML 标签内容部分输出,使用 esc_html:
Echo '<h1>'`. esc_html($post_title)`.'</h1>'; Jeśli treść HTML została potwierdzona jako bezpieczna (na przykład po przeprowadzeniu odpowiednich testów lub weryfikacji), można ją bez obaw używać w aplikacjach lub witrynach internetowych. wp_kses_post Można użyć filtrów, ale należy wyświetlić pełny adres URL. esc_url:
Echo '<a href="/pl/' . esc_url( $external_link ) . '/">link (na stronie internetowej)</a>'; Aby wyświetlić wartość zmiennej PHP w bloku kodu JavaScript, należy użyć funkcji `eval()`. wp_json_encode W połączeniu z… esc_js:
<script>
var pluginSettings = <?php echo wp_json_encode( $settings_array ); ?>;
var message = '<?php echo esc_js( $user_message ); ?>';
</script> Funkcje do obsługi plików i mediów
Wiele wtyczek dotyczy załadania plików, obróbki zdjęć lub dostępu do plików wewnętrznych tematów/wtyczek. WordPress zabezpiecza złożoną logikę adresów serwerowych i URL-ów, oferując przy tym prosty interfejs API.
Udostępnienie absolutnego path do zasobów wewnętrznych wtyczki lub tematu
W rozwoju pluginów często konieczne jest korzystanie z plików CSS, JavaScript lub zdjęć znajdujących się w własnym katalogu. Używanie stałych, absolutnych adresów jest niebezpieczne, ponieważ witryna może zostać przeniesiona na inny serwer. WordPress oferuje rozwiązanie na to. plugin_dir_path 和 plugins_url Funkcja służy do dynamicznego generowania ścieżek.
plugin_dir_path Path do plików w systemie plików serwera, który zawiera katalog z dodatkami (plug-inami), zakończony krzyżką (/). Pasuje do… include 或 require Plik:
$config_path = plugin_dir_path( __FILE__ ) . 'config/config.php';
if ( file_exists( $config_path ) ) {
require_once $config_path;
} 而 plugins_url Znajduje się w używaniu do generowania adresów internetowych (URL), które można otworzyć w przeglądarcu, i jest przydatny w kontekście pracy z systemem `
或 Zasoby cytowane w tekście:
$css_url = plugins_url( 'assets/css/admin-style.css', __FILE__ );
wp_enqueue_style( 'my-admin-style', $css_url ); Dla deweloperów tematycznych (tema developers) odpowiednia funkcja to… get_template_directory_uri 和 get_stylesheet_directory_uri。
Obsługa plików multimedialnych przesłanych przez użytkowników
Jeśli dodatek umożliwia użytkownikom pobieranie i wysyłanie plików, nie wolno ich w żadnym przypadku używać bezpośrednio. $_FILES 全局数组和 move_uploaded_file Funkcje. Funkcje obsługi mediów w WordPress. wp_handle_upload Zawarto pełną integrację funkcji kontroli bezpieczeństwa oraz zarządzania plikami.
Ta funkcja automatycznie sprawdza typ pliku, przepisuje go (by uniknąć nadpisania), obsługuje błędy i przenosi plik do struktury katalogów biblioteki mediów w WordPress.
$uploadedfile = $_FILES['my_plugin_upload'];
$upload_overrides = array( 'test_form' => false );
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
if ( $movefile && ! isset( $movefile['error'] ) ) {
// 文件上传成功
$file_url = $movefile['url'];
$file_path = $movefile['file'];
// 可以将 $file_url 存入数据库
} else {
// 上传失败,输出错误信息
echo $movefile['error'];
} Aby dalej integrować założone pliki do biblioteki mediów w WordPress, można również użyć… wp_insert_attachment Funkcja umożliwia tworzenie postów z załącznikami, dzięki czemu można korzystać z wewnętrznych funkcji obsługi zdjęć w WordPress (np. tworzenie miniatur).
Podsumowanie.
Znajomość kluczowych funkcji i metod WordPress stanowi podstawę do efektywnego i bezpiecznego tworzenia dodatków (pluginów) oraz tematów (templates) do tego systemu. Pojęcie „systemu hooków” (hook system) odgrywa ważną rolę w tej procesie, ponieważ umożliwia dostosowanie zachowania aplikacji według potrzeb.add_action, add_filterImplementacja modułowości oraz operacje na bazie danych$wpdb, get_optionZadbaj o utrzymywanie danych w czasie (ich „pierwszeństwo w dostępności”), a potem przejdź do wyświetlania treści.add_shortcode, esc_html) oraz bezpieczne przetwarzanie (wp_handle_uploadKażdy z tych zestawów funkcji oferuje sprawdzone rozwiązania przydatne w określonych scenariach. Programiści powinni dokładnie zrozumieć parametry, wartości zwrotne oraz najlepsze praktyki stosowane przy ich używaniu, by uniknąć powtarzania pracy oraz wprowadzania luków bezpieczeństwa. Dzięki temu będą w stanie stworzyć rozszerzenia dla WordPressa, które są zarówno wydajne, jak i niezawodne.
FAQ – najczęściej zadawane pytania.
Jaka jest istotna różnica pomiędzy funkcjami `add_action` i `add_filter`?
Różnica kluczowa pomiędzy nimi polega na zastosowaniu oraz oczekiwanych zachowaniach funkcji zwrotnej (callback).add_action Służy do wykonywania określonej operacji w momencie wystąpienia danej zdarzenia; funkcja powrotowa (callback) takiego elementu nie zwykle wraca żadnego wyniku, ale wykona tylko określony kod logiczny (np. wysyła e-mail, zapisuje informacje do logów itd.). add_filter Są używane do “modyfikacji danej wartości”; funkcja wywoływana w ramach tego procesu musi przyjąć jeden argument wejściowy i zwrócić zmienioną wartość. Z punktu widzenia implementacji technicznej obie funkcje są w istocie identyczne, ale różnica semantyczna sprawia, że kod jest bardziej zrozumiały.
Czemu przy użyciu klasy $wpdb konieczne jest wykorzystanie metody prepare?
$wpdb->prepare Metody są kluczową linią obrony przed atakami typu SQL injection. Przyjmują wartości zmiennych za pomocą miejscowników (%s dla stringów, %d dla całych liczb, %f dla liczb zmiennopozycyjnych) i sprawiają, że te wartości są poprawnie wyekscytowane i sformatowane przed wstawieniem do zdań SQL. Nawet jeśli jesteś pewny, że źródło tych zmiennych jest bezpieczne (np. pochodzi z zaufanego źródła). get_option(...) przy użyciu prepare To również dobra zwykłość, którą należy stosować, ponieważ zapewnia stabilność kodu w obliczu przyszłych zmian lub złożonych sytuacji.
Czy funkcje `esc_html` i `esc_attr` można używać zamiast siebie?
Choć w niektórych prostych przypadkach zamiana tych funkcji nie powinna natychmiast powodować błędów, jest to mocno niezaleczone. Obie funkcje zostały dostosowane do różnych kontekstów HTML.esc_html Znaczek używany do escapeowania zawartości znajdującej się wewnątrz tagów HTML. Ma za zadanie zapobieganiu niewłaściwemu interpretacji tego kodu przez przeglądarki internetowe. <、>、&、"、' Znaków typu „“, „&“, „“, „?“ itd. konwertuje się na odpowiednie HTML entyty. esc_attr Znaczek przeznaczony specjalnie do escapeowania wartości w atrybach tagów HTML; dodatkowo uwzględnia możliwość, że wartości atryb mogą być otoczone nawodnikami. Używanie właśnie tej funkcji gwarantuje bezpieczne escapeowanie w wszystkich możliwych przypadkach.
Co oznacza konstanta FILE w zapisie `plugin_dir_path(FILE)`?
FILE To stała magiczna w PHP, która reprezentuje pełny ścieżek i nazwę pliku, w którym jest wykonywany aktualny skrypt. Można ją używać w głównym pliku pluginu. plugin_dir_path(FILE)Można dynamicznie i dokładnie uzyskać absolutny path do katalogu tego pluginu, niezależnie od tego, w jakim miejscu jest on zainstalowany. To znacznie bardziej pewne niż używanie stałych, hardkodowanych adresów i gwarantuje portowalność pluginu na różnych serwerach. Podczas rozwoju tematów (tema development) często występują podobne konstanty. DIR lub funkcja get_template_directory() Pełnią tę samą rolę.
Następny krok, co dalej?
Dalsze lektury i praktyczna wiedza.
Poniższe treści są powiązane z tematem tego artykułu i warto je przeczytać. Zwykle lepiej zacząć od artykułu, który najbardziej odpowiada aktualnemu problemowi, a potem stopniowo przechodzić do tematów pokrewnych.
- Wstęp: dlaczego wybrałem WordPress do tworzenia stron internetowych?
- Co to jest subtemat WordPress?
- Od zera: Pełny proces rozwoju tematów dla WordPressa w erze nowoczesnej oraz najlepsze praktyki
- Pełny przewodnik po rozwoju pluginów dla WordPressa: od poznania podstaw do osiągnięcia biegłości w tworzeniu profesjonalnych rozszerzeń
- Postępowy kurs efektywnego rozwoju WordPress: od personalizacji tematów do optymalizacji wydajności