Ядерная физика WordPress

// Понимание устройства ядра WordPress

Последовательность загрузки

//

  • Веб-запрос
    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 который загружает корректный шаблон из иерархии.
        • !!!

Фильтры

/

Фильтры-заглушки

  • __return_true() — возвращает true
  • __return_false() — возвращает false
  • __return_zero() — возвращает 0
  • __return_empty_string() — возвращает пустую строку
  • __return_empty_array() — возвращает пустой массив
  • __return_null() — возвращает null

События и хуки

Code Reference: Home / Reference / Hooks: //developer.wordpress.org

Произвольная php-функция может быть добавлена к хуку определенного события. Эта функция будет последовательно вызвана с другими функциями хука в момент события или с помощью  вызова do_action(). Добавленная к хуку php-функция может быть удалена из хука функцией remove_action(). Пример:

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()
  • 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' !!! запись представляется ассоциативным массивом, в котором в качестве ключей будут использоваться значения в первой колонке, дубликаты будут проигнорированы
    • wpdb::get_var( string|null $query = null, int $x, int $y ) : string|null выполняет запрос SQL и возвращает значение из результата SQL, если результат SQL содержит более одного столбца и/или более одной строки, возвращается значение в указанных столбце и строке, если $query имеет значение null, возвращается значение в указанном столбце и строке из предыдущего результата SQL

Имена всех системных таблиц WordPress находятся в свойствах $wpdb и доступны как $wpdb->users$wpdb->posts$wpdb->comments$wpdb->options и т.д, При выполнении запросов методами $wpdb в запросах допустимо использовать эти свойства в качестве имен системных таблиц. Например:

Например:

/!!!

Например:

/

/

Загрузка WordPress

//

Минимализм

Do you really need plugins when loading wordpress core? This is the core to load a minimum configuration (without plugins and themes):

If you need theme support you can this trick:

All code in you functions.php should be loaded fine

Источники

Подборка CMS на канале Kamil Abzalov //youtube.com

 

Leave a Reply