// Понимание устройства ядра WordPress
- To learn more about what filter and action hooks are, see Plugin API.
- To learn about writing plugins in general, see Writing a Plugin.
- For a reference list of filter hooks, see Plugin API/Filter Reference.
- For a reference list of action hooks, see Plugin API/Action Reference.
WordPress для всех //wpkupi.ru
- WP-Kama //wp-kama.ru
- Is there a flowchart for WordPress loading sequence? //wordpress.stackexchange.com
Последовательность загрузки
//
- Веб-запрос
HTTP клиент выполняет запрос к веб-серверу в форме сообщения. - INDEX.PHP
С этого файла начинается последовательность. В нем выполняется:- Константа WP_USE_THEMES сообщает WP загрузить активную тему
- Подключает /wp-blog-header.php который загружает среду WP
- /WP-BLOG-HEADER.PHP
Модуль выполняет три задачи:- Подключает модуль /wp-load.php который полностью настраивает среду WP
- Выполняет функцию wp() которая настраивает и запускает запрос получения необходимых данных
- Подключает модуль /wp-includes/template-loader.php который загружает корректный шаблон из иерархии.
- !!!
- /WP-BLOG-HEADER.PHP
Фильтры
/
Фильтры-заглушки
- __return_true() — возвращает true
- __return_false() — возвращает false
- __return_zero() — возвращает 0
- __return_empty_string() — возвращает пустую строку
- __return_empty_array() — возвращает пустой массив
- __return_null() — возвращает null
1 2 |
// фильтр запрета на комментирование add_filter( 'comments_open', '__return_false' ); |
События и хуки
Code Reference: Home / Reference / Hooks: //developer.wordpress.org
Произвольная php-функция может быть добавлена к хуку определенного события. Эта функция будет последовательно вызвана с другими функциями хука в момент события или с помощью вызова do_action(). Добавленная к хуку php-функция может быть удалена из хука функцией remove_action(). Пример:
1 2 3 |
add_action( 'action_name', 'action_proc' ); do_action( 'action_name' ); remove_action( 'action_name', 'action_proc' ); |
admin_post_(action)
admin_post_nopriv_(action) - срабатывает при неаутентифицированном почтовом запросе администратора для данного действия
admin_post_nopriv_contact_form
admin_post_contact_form - срабатывает при аутентифицированном почтовом запросе администратора, в котором не указано никаких действий.
константы
ABSPATH определяется в load-styles.php и содержит путь к корневому каталогу WP.
WPINC определяется в load-styles.php и содержит имя каталога включений, как правило это 'wp-includes'.
Глобальные массивы
Функции
Х
/
- wp_redirect() - выдает перенаправление браузеру по указанному адресу
- wp_die( ) останавливает выполнение PHP скрипта и выводит отформатированное HTML сообщение, рекомендуется использовать только при необходимости показывать ошибку пользователю
Вспомогательные
esc_url( $url, $protocols, $_context ) - конвертирует строку в корректный URL
admin_url( $path, $scheme ) - возвращает URL админ-панели сайта; учитывает протоколы (http и https);
Пользователи
/
- wp_get_current_user(): WP_User (wp-includes/user.php) - извлекает текущий пользовательский глобальный объект $current_user
- is_user_logged_in(): bool - Определяет, является ли текущий посетитель авторизованным пользователем
- wp_get_current_user(): WP_User (wp-includes/pluggable.php) - Будет установлен текущий пользователь, если текущий пользователь не установлен. Текущим пользователем будет установлено лицо, вошедшее в систему. Если ни один пользователь не вошел в систему, то для текущего пользователя будет установлено значение 0, что является недопустимым и не будет иметь никаких разрешений
- wp_authenticate( string $username, string $password ): WP_User|WP_Error - аутентифицирует пользователя, подтверждая правильность учетных данных для входа
- wp_signon( array $credentials = array(), string|bool $secure_cookie = '' ): WP_User|WP_Error - аутентифицирует и регистрирует пользователя с возможностью «запоминания»
wp_set_auth_cookie()
Вход/выход
check_password_reset_key()
get_password_reset_key()
is_user_logged_in()
wp_check_password()
wp_get_password_hint()
wp_login_form()
wp_login_url()
wp_loginout()
wp_logout()
wp_logout_url()
wp_lostpassword_url()
wp_register()
wp_registration_url()
wp_set_password()
wp_signon($creds, false)
Публикации
/
- have_posts() - Определяет, есть ли в текущем запросе WordPress еще сообщения; используется для цикла перебора публикаций; вызывает метод глобального объекта $wp_query->have_posts().
- the_post() - Устанавливает итератор публикации; используется в цикле для перебора всех отобранных публикаций; вызывает метод глобального объекта $wp_query->the_post().
- get_post_permalink( $id, $leavename, $sample ) : string получает URL (постоянную ссылку) на запись произвольного типа
- $id : int ID поста, ссылку на который нужно получить. По умолчанию: ID текущего поста, который находится в цикле WordPress в данный момент
- $leavename : bool необязательный, по умолчанию false, оставлять ли имя поста. true - не заменять плейсхолдер %post_type% на имя поста
- $sample : bool необязательный, по умолчанию false, true — это образец (пример) ссылки. На вывод не влияет, но передается в хук post_type_link
- get_edit_post_link( $id, $context ) : string получает URL на редактирование записи в админ-панели, как внутри, так и снаружи цикла WP; применимо ко всем видам записей: посты, страницы, вложения, ревизии и произвольные типы записей.
- $id : int | Object ID или объект записи, по умолчанию: 0 (текущий пост)
$context : string по умолчанию 'display' означает, что амперсанд (&) будет преобразован в &. Укажите '', чтобы не изменять амперсанд, например, для корректной работы с wp_redirect()
- $id : int | Object ID или объект записи, по умолчанию: 0 (текущий пост)
- get_post_thumbnail_id( int|WP_Post $post = null ): int|false
Retrieves the post thumbnail ID - wp_get_attachment_image_src( int $attachment_id, string|int[] $size = 'thumbnail', bool $icon = false ): array|false
Retrieves an image to represent an attachment. - get_search_link( $query ) : string Получает УРЛ страницы поиска с учетом текущего/указанного запроса поиска.
- $query : string Запрос поиска. Если не указать, то будет использоваться текущий запрос: get_search_query( false )
Безопасность
- wp_create_nonce( string|int $action = -1 ) : string Создает криптографический токен, привязанный к определенному действию, пользователю, пользовательскому сеансу и временному окну
- check_ajax_referer( int|string $action = -1, false|string $query_arg = false, bool $die = true ) : int|false проверяет ajax-запрос на соответствие nonce кода, при несоответствии прекращает работу скрипта вызовом die() или wp_die().
MySQL DB
WordPress database access abstraction class //developer.wordpress.org
В WordPress для операций с DB используется специальный класс wpdb. Для выполнения операций с текущей базой WordPress существует глобальная переменная $wpdb класса wpdb, которую перед использованием в функциях необходимо глобализировать.
Методы объекта $wpdb позволяют выполнять операции предусмотренные языком запросов SQL:
-
- wpdb::prepare( string $query, mixed $args ) - подготавливает SQL-запрос к безопасному выполнению путем корректной вставки в шаблон query значений args
- значения %d (integer) %f (float) %s (string)
- wpdb::query( string $query ) int|true|false -
- возвращает true — для запросов CREATE, ALTER, TRUNCATE, DROP
- возвращает int — задействованных строк, для запросов: DELETE/UPDATE/SELECT
- возвращает false — при ошибке выполнения запроса
- wpdb::get_results( string $query = null, string $output = OBJECT ) : array|object|null извлекает полный набор данных select-запроса в виде массива записей
- $output : string 'ARRAY_A' | 'ARRAY_N' | 'OBJECT' | 'OBJECT_K' - необязательный, назначает тип и вид возвращаемого набора записей и представления отдельной записи
- 'ARRAY_A' !!!
- 'ARRAY_N' !!!
- 'OBJECT' по умолчанию, запись будет представлена объектом, свойства которого будет представлять поля данных записи
- 'OBJECT_K' !!! запись представляется ассоциативным массивом, в котором в качестве ключей будут использоваться значения в первой колонке, дубликаты будут проигнорированы
- $output : string 'ARRAY_A' | 'ARRAY_N' | 'OBJECT' | 'OBJECT_K' - необязательный, назначает тип и вид возвращаемого набора записей и представления отдельной записи
- wpdb::get_var( string|null $query = null, int $x, int $y ) : string|null выполняет запрос SQL и возвращает значение из результата SQL, если результат SQL содержит более одного столбца и/или более одной строки, возвращается значение в указанных столбце и строке, если $query имеет значение null, возвращается значение в указанном столбце и строке из предыдущего результата SQL
- wpdb::prepare( string $query, mixed $args ) - подготавливает SQL-запрос к безопасному выполнению путем корректной вставки в шаблон query значений args
Имена всех системных таблиц WordPress находятся в свойствах $wpdb и доступны как $wpdb->users, $wpdb->posts, $wpdb->comments, $wpdb->options и т.д, При выполнении запросов методами $wpdb в запросах допустимо использовать эти свойства в качестве имен системных таблиц. Например:
1 |
$wpdb->query("DELETE FROM $wpdb->comments WHERE comment_content LIKE '<strong>%';"); |
Например:
1 2 3 4 5 6 |
resultArray = $wpdb->get_results("SELECT * FROM $wpdd->posts ORDER BY post_modified DESC LIMIT 10"); if( $resultArray ) { foreach ( $resultArray as $dataObject ) { echo "<p>id: " . $dataObject->id . " post_modified: " . $dataObject->post_modified</p>"; } } |
/!!!
Например:
1 |
$wpdb->query("DELETE FROM $wpdb->comments WHERE comment_content LIKE '<strong>%';"); |
/
/
Загрузка WordPress
//
1 2 3 4 |
/** index.php */ define( 'WP_USE_THEMES', true ); /** Loads the WordPress Environment and Template */ require( dirname( __FILE__ ) . '/wp-blog-header.php' ); |
1 2 3 4 5 6 7 8 9 10 |
/** wp-blog-header.php */ if ( ! isset( $wp_did_header ) ) { $wp_did_header = true; // Load the WordPress library. require_once( dirname( __FILE__ ) . '/wp-load.php' ); // Set up the WordPress query. wp(); // Load the theme template. require_once( ABSPATH . WPINC . '/template-loader.php' ); } |
1 2 3 4 5 6 7 8 |
/** wp-load.php */ ... if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', __DIR__ . '/' ); } ... if ( file_exists( ABSPATH . 'wp-config.php' ) ) { require_once ABSPATH . 'wp-config.php'; |
Минимализм
Do you really need plugins when loading wordpress core? This is the core to load a minimum configuration (without plugins and themes):
1 2 |
define('SHORTINIT', true); require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'); |
If you need theme support you can this trick:
1 2 3 4 5 6 |
define('WP_PLUGIN_DIR', ''); require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'); /* start theme */ get_header(); the_content(); get_footer(); |
All code in you functions.php should be loaded fine
Источники
Подборка CMS на канале Kamil Abzalov //youtube.com