62
Как получить чёрный пояс по WordPress? Евгений Котельницкий WordCamp Russia 2015

Как получить чёрный пояс по WordPress?

Embed Size (px)

Citation preview

Page 1: Как получить чёрный пояс по WordPress?

Как получить чёрный пояс

по WordPress?

Евгений КотельницкийWordCamp Russia 2015

Page 4: Как получить чёрный пояс по WordPress?

План1. Что определяет уровень разработчика?

2. Через что проходит WP разработчик?

3. Что дальше?

Page 5: Как получить чёрный пояс по WordPress?
Page 6: Как получить чёрный пояс по WordPress?
Page 7: Как получить чёрный пояс по WordPress?

Шаг 1 - Регестрируем блог на WP.com

Page 8: Как получить чёрный пояс по WordPress?

Шаг 2 - Поднимаем WP на Shared-хостинге

Page 9: Как получить чёрный пояс по WordPress?

Шаг 3 - Устанавливаем темы

Page 10: Как получить чёрный пояс по WordPress?

Шаг 4 - Вносим правки в тему

Page 11: Как получить чёрный пояс по WordPress?

Шаг 5 - Устанавливаем плагины

Page 12: Как получить чёрный пояс по WordPress?

Шаг 6 - Изучаем админку

Page 13: Как получить чёрный пояс по WordPress?

WordPress User Roles

User Roles

● Super Admin – site network administration;

● Administrator – administration features within a single site;

● Editor – can publish and manage posts of other users;

● Author – can publish and manage their own posts;

● Contributor – can write posts but cannot publish them;

● Subscriber – can only manage their profile.

Page 14: Как получить чёрный пояс по WordPress?

Первый пояс есть!

Page 15: Как получить чёрный пояс по WordPress?

FTP / SFTP

Page 16: Как получить чёрный пояс по WordPress?

PhpMyAdmin

Page 17: Как получить чёрный пояс по WordPress?

Начинаем создавать темы осмысленно

Знакомимся с теорией:

● http://codex.wordpress.org/Theme_Development● http://codex.wordpress.org/Template_Hierarchy● http://codex.wordpress.org/Conditional_Tags● ...

Page 18: Как получить чёрный пояс по WordPress?

Plugins & MU plugins

Page 19: Как получить чёрный пояс по WordPress?

Post Types

● Post (Post Type: 'post')

● Page (Post Type: 'page')

● Attachment (Post Type: 'attachment')

● Revision (Post Type: 'revision')

● Navigation menu (Post Type: 'nav_menu_item')

● Custom Post Type (CPT): register_post_type()

Page 20: Как получить чёрный пояс по WordPress?

Taxonomies

● Category (taxonomy: 'category')

● Tag (taxonomy: 'post_tag')

● Link Category (taxonomy: 'link_category')

● Post Formats (taxonomy: 'post_format')

● Custom Taxonomies: register_taxonomy()

Page 21: Как получить чёрный пояс по WordPress?

Data Access API

● WP_Query● WP_Tax_Query● WP_User_Query● get_posts ()● get_terms ()● get_option ()● get_post_meta ()● get_user_meta ()● ...

Page 22: Как получить чёрный пояс по WordPress?

Второй пояс получен!

Page 23: Как получить чёрный пояс по WordPress?

Database Structure

Page 24: Как получить чёрный пояс по WordPress?

Direct Database Access abstraction

<?php

global $wpdb;

$wpdb->query(

$wpdb->prepare(

"DELETE FROM $wpdb->postmeta

WHERE post_id = %d

AND meta_key = %s",

13, 'gargle' ) );

?>

Page 25: Как получить чёрный пояс по WordPress?

/**

* WordPress Database Access Abstraction

*/

class wpdb {

public function prepare( $query, $args );

public function show_errors( $show = true );

public function query( $query );

public function get_results( $query = null, $output = OBJECT ) {

public function get_row( $query = null, $output = OBJECT, $y = 0 );

public function get_col( $query = null , $x = 0 );

public function get_var( $query = null, $x = 0, $y = 0 );

public function update( $table, $data, $where, $format = null, $where_format = null );

...

Direct Database Access abstraction

Page 26: Как получить чёрный пояс по WordPress?

Система хуков

<?php

do_action( $tag, $arg_a, $arg_b, $etc );

add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 );

?>

<?php

apply_filters( $tag, $value );

add_filter( $tag, $function_to_add, $priority, $accepted_args );

?>

Actions

Filters

Page 27: Как получить чёрный пояс по WordPress?

Достигнут новый пояс!

Page 28: Как получить чёрный пояс по WordPress?

Source Code Management Systems

Page 30: Как получить чёрный пояс по WordPress?

Localization

Page 31: Как получить чёрный пояс по WordPress?

Localization

<?php

load_textdomain( $domain, $mofile );

load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path );

?>

<?php

$translated = __( 'Hello World!', 'domain' );

?>

<?php _e( 'Hello World!', 'domain' ) ?>

Page 32: Как получить чёрный пояс по WordPress?

Localization & JS

<?php

// Register the script first

wp_register_script( 'some_handle', 'path/to/myscript.js' );

// Now we can localize the script with our data

$translation = array(

'some_str' => __( 'Some string', 'domain' ),

'a_value' => '10'

);

wp_localize_script( 'handle', 'object_name', $translation );

// The script can be enqueued now or later

wp_enqueue_script( 'handle' );

Page 33: Как получить чёрный пояс по WordPress?

Зелёный пояс!

Page 34: Как получить чёрный пояс по WordPress?

WP Network

Page 35: Как получить чёрный пояс по WordPress?

WP Network

<?php

switch_to_blog( $blog_id );

// Do something

restore_current_blog();

?>

Page 36: Как получить чёрный пояс по WordPress?

Network Database

● wp_blogs

● wp_blog_versions

● wp_registration_log

● wp_signups

● wp_site

● wp_sitemeta

Page 37: Как получить чёрный пояс по WordPress?

Быстродействие

Page 38: Как получить чёрный пояс по WordPress?

Синий пояс!

Page 39: Как получить чёрный пояс по WordPress?

WordPress User Roles

Super Admin capabilities

● manage_network

● manage_sites

● manage_network_users

● manage_network_plugins

● manage_network_themes

● manage_network_options

● ...

Subscriber capabilities

● read

Page 40: Как получить чёрный пояс по WordPress?

WordPress User Roles

class WP_Roles {

/**

* Add role name with capabilities to list.

*/

public function add_role( $role, $display_name, $capabilities = array() );

public function remove_role( $role );

/**

* Add capability to role.

*/

public function add_cap( $role, $cap, $grant = true );

public function remove_cap( $role, $cap );

...

Page 41: Как получить чёрный пояс по WordPress?

WordPress User class

class WP_User {

/**

* Add role to user.

*/

public function add_role( $role );

public function remove_role( $role );

public function set_role( $role );

/**

* Add capability and grant or deny access to capability.

*/

public function add_cap( $cap, $grant = true );

public function remove_cap( $cap );

...

Page 42: Как получить чёрный пояс по WordPress?

class WP_User {

/**

* Whether user has capability or role name.

* @return bool True, if user has capability;

* false, if user does not have capability.

*/

public function has_cap( $cap ) {

$caps = call_user_func_array( 'map_meta_cap', $args );

...

// Must have ALL requested caps

$capabilities = apply_filters(

'user_has_cap', $this->allcaps,

$caps, $args, $this );

...

WordPress User class

Page 43: Как получить чёрный пояс по WordPress?

Впервые задумываемся о безопасности

Page 44: Как получить чёрный пояс по WordPress?

Коричневый пояс!

Page 45: Как получить чёрный пояс по WordPress?

Как работает WordPress?WordPress environment setup class

class WP {

/**

* Sets up all of the variables required by the WordPress environment.

* @param string|array $query_args Passed to {@link parse_request()}

*/

public function main($query_args = '') {

$this->init();

$this->parse_request($query_args);

$this->send_headers();

$this->query_posts();

$this->handle_404();

$this->register_globals();

do_action_ref_array( 'wp', array( &$this ) );

}

...

Page 46: Как получить чёрный пояс по WordPress?

WP_Rewrite - “Роутинг”

Page 47: Как получить чёрный пояс по WordPress?

WP_Rewrite - “Роутинг”

class WP_Rewrite {

/**

* Retrieve the rewrite rules.

* @return array Rewrite rules.

*/

public function wp_rewrite_rules() {

$this->rules = get_option('rewrite_rules');

if ( empty($this->rules) ) {

$this->matches = 'matches';

$this->rewrite_rules();

update_option('rewrite_rules', $this->rules);

}

return $this->rules;

}

...

Page 48: Как получить чёрный пояс по WordPress?

WP_Rewrite - “Роутинг”Rewrite Rules

<?php

$rewrite = $wp_rewrite->wp_rewrite_rules();

array(

[robots\.txt$] => index.php?robots=1

[category/(.+?)/?$] => index.php?category_name=$matches[1]

[page/?([0-9]{1,})/?$] => index.php?&paged=$matches[1]

[search/(.+)/?$] => index.php?s=$matches[1]

[([0-9]{4})/?$] => index.php?year=$matches[1]

[.?.+?/attachment/([^/]+)/?$] => index.php?attachment=$matches[1]

[(.?.+?)(/[0-9]+)?/?$] => index.php?pagename=$matches[1]&page=$matches[2]

...

Page 49: Как получить чёрный пояс по WordPress?

WP_Rewrite - “Роутинг”Rewrite Rules filters

1. apply_filters( 'post_rewrite_rules', $post_rewrite );

2. apply_filters( 'date_rewrite_rules', $date_rewrite );

3. apply_filters( 'root_rewrite_rules', $root_rewrite );

4. apply_filters( 'comments_rewrite_rules', $comments_rewrite );

5. apply_filters( 'search_rewrite_rules', $search_rewrite );

6. apply_filters( 'author_rewrite_rules', $author_rewrite );

7. apply_filters( 'page_rewrite_rules', $page_rewrite );

8. apply_filters( $permastructname . '_rewrite_rules', $rules );

9. apply_filters( 'rewrite_rules_array', $this->rules );

Page 50: Как получить чёрный пояс по WordPress?

WP_Rewrite - “Роутинг”WP_Rewrite::add_rule ()

// http://example.com/properties/123/

add_action( 'init', '_rewrites_init' );

function _rewrites_init() {

add_rewrite_rule(

'properties/([0-9]+)/?$',

'index.php?pagename=properties&property_id=$matches[1]', 'top' );

}

add_filter( 'query_vars', '_query_vars' );

function _query_vars( $query_vars ) {

$query_vars[] = 'property_id';

return $query_vars;

}

Page 51: Как получить чёрный пояс по WordPress?

WP_Rewrite - “Роутинг”WP_Rewrite::add_permastruct ()

<?php

class WP_Rewrite {

/**

* Add a new permalink structure.

*/

public function add_permastruct( $name, $struct, $args = array() ) {

...

$this->extra_permastructs[ $name ] = $args;

}

...

?>

Page 52: Как получить чёрный пояс по WordPress?

WP_Rewrite - “Роутинг”WP_Rewrite::add_permastruct ()

<?php

// http://example.com/au/some-prize-category/some-competition/

$wp_rewrite->add_rewrite_tag('%competition%', '([^/]+)', 'competition=');

$wp_rewrite->add_rewrite_tag('%prize_category%', '([^/]+)', 'prize_category=');

$wp_rewrite->add_permastruct(

'competition',

'/au/%prize_category%/%competition%/',

array( 'walk_dirs' => false ));

?>

Page 53: Как получить чёрный пояс по WordPress?

WP_Query - The Query classWordPress environment setup class

class WP {

/**

* Sets up all of the variables required by the WordPress environment.

* @param string|array $query_args Passed to {@link parse_request()}

*/

public function main($query_args = '') {

$this->init();

$this->parse_request($query_args);

$this->send_headers();

$this->query_posts();

$this->handle_404();

$this->register_globals();

do_action_ref_array( 'wp', array( &$this ) );

}

...

Page 54: Как получить чёрный пояс по WordPress?

WP_Query - The Query classThe Main Query

/**

* WordPress environment setup class.

*/

class WP {

/**

* Set up the Loop based on the query variables.

*/

public function query_posts() {

global $wp_the_query;

$this->build_query_string();

$wp_the_query->query($this->query_vars);

}

...

Page 55: Как получить чёрный пояс по WordPress?

WP_Query - The Query class

class WP_Query {

/**

* Sets up the WordPress query by parsing query string.

* @return array List of posts.

*/

public function query( $query ) {

$this->init();

$this->query = $this->query_vars = wp_parse_args( $query );

return $this->get_posts();

}

/**

* Retrieve the posts based on query variables.

* @return array List of posts.

*/

public function get_posts() {

...

do_action_ref_array( 'pre_get_posts', array( &$this ) );

...

Page 56: Как получить чёрный пояс по WordPress?

WP_Query - The Query classQuery vars

/**

* Retrieve variable in the WP_Query class.

*

* @see WP_Query::get()

* @uses $wp_query

*

* @return mixed

*/

function get_query_var( $var, $default = '' ) {

global $wp_query;

return $wp_query->get( $var, $default );

}

Page 57: Как получить чёрный пояс по WordPress?

Чёрный пояс!

Page 58: Как получить чёрный пояс по WordPress?

Это всё?

Page 59: Как получить чёрный пояс по WordPress?

Это начало :)

Page 60: Как получить чёрный пояс по WordPress?

Highload & Perfomance,

Architecture, Supportability, Usability,

UNIX/Linux CLI, Stability, Unit

Testing, Continius integration,

… Communication skills,

Time management

Page 61: Как получить чёрный пояс по WordPress?

Вопросы?

Page 62: Как получить чёрный пояс по WordPress?

Спасибо!