Upload
shtrih-sruleg
View
628
Download
2
Embed Size (px)
DESCRIPTION
Малоизвестные функции в WordPress [WordCamp Russia 2014]
Citation preview
«МАЛОИЗВЕСТНЫЕ ФУНКЦИИ В WORDPRESS»
АЛЕКСАНДР СТРИХАCTO PINGBULL LLC
Велокодер
WordPress Man
$email = "[email protected]";
ПРОВЕРИТЬ E-MAILЗАДАЧА
if( preg_match( "/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email ) ) { // valid}
$email = "[email protected]";
ПРОВЕРИТЬ E-MAILЗАДАЧА
if( preg_match( "/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email ) ) { // valid}
if( filter_var( $email, FILTER_VALIDATE_EMAIL ) ) { // valid}
$email = "[email protected]";
ПРОВЕРИТЬ E-MAILЗАДАЧА
if( preg_match( "/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email ) ) { // valid}
if( filter_var( $email, FILTER_VALIDATE_EMAIL ) ) { // valid}
if( is_email( $email ) ) { // valid}
$email = "[email protected]";
ПРОВЕРИТЬ E-MAILЗАДАЧА
$email = "[email protected]";
ЗАЩИТИТЬ E-MAIL ОТ СПАМАЗАДАЧА
$safe_email = '';for ( $i = 0; $i < strlen( $email ); $i++ ) { $safe_email .= '&#' . ord( $email[ $i ] ) . ';';}
$email = "[email protected]";
ЗАЩИТИТЬ E-MAIL ОТ СПАМАЗАДАЧА
$safe_email = '';for ( $i = 0; $i < strlen( $email ); $i++ ) { $safe_email .= '&#' . ord( $email[ $i ] ) . ';';}
$safe_email = antispambot( $email );
$email = "[email protected]";
ЗАЩИТИТЬ E-MAIL ОТ СПАМАЗАДАЧА
$text = "My email: [email protected]\n My blog: http://example.com";
СДЕЛАТЬ ССЫЛКИ В ТЕКСТЕ КЛИКАБЕЛЬНЫМИЗАДАЧА
$clickable_text = preg_replace( '!(((f|ht)tp(s)?://)[-a-zA-а-яА-Я()0-9@:%_+.~#?&;//=]+)!i' , '<a href="$1">$1</a>', $text );
$text = "My email: [email protected]\n My blog: http://example.com";
СДЕЛАТЬ ССЫЛКИ В ТЕКСТЕ КЛИКАБЕЛЬНЫМИЗАДАЧА
$clickable_text = preg_replace( '!(((f|ht)tp(s)?://)[-a-zA-а-яА-Я()0-9@:%_+.~#?&;//=]+)!i' , '<a href="$1">$1</a>', $text );
$clickable_text = make_clickable( $text );
$text = "My email: [email protected]\n My blog: http://example.com";
СДЕЛАТЬ ССЫЛКИ В ТЕКСТЕ КЛИКАБЕЛЬНЫМИЗАДАЧА
$text = "Tweet by <a href='http://example.com'>William</a>";
ОТКРЫВАТЬ ССЫЛКИ В НОВОМ ОКНЕЗАДАЧА
$external_clickable_text = preg_replace( '/<a (.+?)>/i', "<a $1 target='_blank' rel='external'>", $text );
$text = "Tweet by <a href='http://example.com'>William</a>";
ОТКРЫВАТЬ ССЫЛКИ В НОВОМ ОКНЕЗАДАЧА
$external_clickable_text = preg_replace( '/<a (.+?)>/i', "<a $1 target='_blank' rel='external'>", $text );
$external_clickable_text = popuplinks( $text );
$text = "Tweet by <a href='http://example.com'>William</a>";
ОТКРЫВАТЬ ССЫЛКИ В НОВОМ ОКНЕЗАДАЧА
$posts = get_posts();
ПОЛУЧИТЬ МАССИВ АТРИБУТОВ ИЗ КОЛЛЕКЦИИЗАДАЧА
$titles = array();foreach( $posts as $post ) { $titles[] = $post->post_title; }
$posts = get_posts();
ПОЛУЧИТЬ МАССИВ АТРИБУТОВ ИЗ КОЛЛЕКЦИИЗАДАЧА
$titles = array();foreach( $posts as $post ) { $titles[] = $post->post_title; }
$titles = array_map( 'array_map_callback', $posts );function array_map_callback( $post ) { return $post->post_title; }
$posts = get_posts();
ПОЛУЧИТЬ МАССИВ АТРИБУТОВ ИЗ КОЛЛЕКЦИИЗАДАЧА
$titles = array();foreach( $posts as $post ) { $titles[] = $post->post_title; }
$titles = array_map( 'array_map_callback', $posts );function array_map_callback( $post ) { return $post->post_title; }
$titles = wp_list_pluck( $posts, 'post_title' );
$posts = get_posts();
ПОЛУЧИТЬ МАССИВ АТРИБУТОВ ИЗ КОЛЛЕКЦИИЗАДАЧА
ДОБАВИТЬ CHECKED АТРИБУТ К CHECKBOXЗАДАЧА
<input type="checkbox" name="remember" value="1" <?php if ( $_POST['remember'] == 1 ){ echo 'checked="checked"'; } ?> />
ДОБАВИТЬ CHECKED АТРИБУТ К CHECKBOXЗАДАЧА
<input type="checkbox" name="remember" value="1" <?php if ( $_POST['remember'] == 1 ){ echo 'checked="checked"'; } ?> />
<input type="checkbox" name="remember" value="1" <?php checked( $_POST['remember'] ) ?> />
ДОБАВИТЬ CHECKED АТРИБУТ К CHECKBOXЗАДАЧА
$published = strtotime( $post->post_date );
ВЫЧИСЛИТЬ РАЗНИЦУ ВО ВРЕМЕНИЗАДАЧА
$now = time();$dif = $now - $published;if ( $dif < 60 ) { // a lot of code here...
$published = strtotime( $post->post_date );
ВЫЧИСЛИТЬ РАЗНИЦУ ВО ВРЕМЕНИЗАДАЧА
$now = time();$dif = $now - $published;if ( $dif < 60 ) { // a lot of code here...
$string = human_time_diff( $published );
$published = strtotime( $post->post_date );
ВЫЧИСЛИТЬ РАЗНИЦУ ВО ВРЕМЕНИЗАДАЧА
$result = array( 'success' => true, 'data' => 'Some data' );
ВЫВЕСТИ ДАННЫЕ В JSON ФОРМАТЕЗАДАЧА
header( 'Content-Type: application/json' );echo json_encode( $result );wp_die();
$result = array( 'success' => true, 'data' => 'Some data' );
ВЫВЕСТИ ДАННЫЕ В JSON ФОРМАТЕЗАДАЧА
header( 'Content-Type: application/json' );echo json_encode( $result );wp_die();
wp_send_json( $result );
$result = array( 'success' => true, 'data' => 'Some data' );
ВЫВЕСТИ ДАННЫЕ В JSON ФОРМАТЕЗАДАЧА
header( 'Content-Type: application/json' );echo json_encode( $result );wp_die();
wp_send_json( $result );
wp_send_json_success( 'Some data' );
$result = array( 'success' => true, 'data' => 'Some data' );
ВЫВЕСТИ ДАННЫЕ В JSON ФОРМАТЕЗАДАЧА
ПОЛУЧИТЬ ДАННЫЕ СО СТОРОННЕГО РЕСУРСАЗАДАЧА
$tweets = file_get_contents( "https://api.twitter.com/1.1/search/tweets.json?q=%23WordPress" );
ПОЛУЧИТЬ ДАННЫЕ СО СТОРОННЕГО РЕСУРСАЗАДАЧА
$tweets = file_get_contents( "https://api.twitter.com/1.1/search/tweets.json?q=%23WordPress" );
$curl = curl_init();curl_setopt( $curl, CURLOPT_URL, "https://api.twitter.com/1.1/search/tweets.json" );curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );curl_setopt( $curl, CURLOPT_POST, true );curl_setopt( $curl, CURLOPT_POSTFIELDS, "q=%23WordPress" );$tweets$tweets = curl_exec( $curl );curl_close( $curl );
ПОЛУЧИТЬ ДАННЫЕ СО СТОРОННЕГО РЕСУРСАЗАДАЧА
$tweets = file_get_contents( "https://api.twitter.com/1.1/search/tweets.json?q=%23WordPress" );
$curl = curl_init();curl_setopt( $curl, CURLOPT_URL, "https://api.twitter.com/1.1/search/tweets.json" );curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );curl_setopt( $curl, CURLOPT_POST, true );curl_setopt( $curl, CURLOPT_POSTFIELDS, "q=%23WordPress" );$tweets$tweets = curl_exec( $curl );curl_close( $curl );
$response = wp_remote_get( "https://api.twitter.com/1.1/search/tweets.json?q=%23WordPress" );$tweets = wp_remote_retrieve_body( $response );
ПОЛУЧИТЬ ДАННЫЕ СО СТОРОННЕГО РЕСУРСАЗАДАЧА
ОПРЕДЕЛИТЬ УСТРОЙСТВО ПОСЕТИТЕЛЯЗАДАЧА
$is_mobile = preg_match( "/(android|phone|blackberry|***|up\.browser|up\.link|webos|wos)/i", $_SERVER["HTTP_USER_AGENT"] );
ОПРЕДЕЛИТЬ УСТРОЙСТВО ПОСЕТИТЕЛЯЗАДАЧА
$is_mobile = preg_match( "/(android|phone|blackberry|***|up\.browser|up\.link|webos|wos)/i", $_SERVER["HTTP_USER_AGENT"] );
$is_mobile = wp_is_mobile();
ОПРЕДЕЛИТЬ УСТРОЙСТВО ПОСЕТИТЕЛЯЗАДАЧА
$video = 'https://www.youtube.com/watch?v=Lcvh0DgytH8';
ПРЕОБРАЗОВАТЬ ССЫЛКИ НА ВИДЕО В HTML КОД ПЛЕЕРАЗАДАЧА
if( false !== mb_strpos( $video, 'youtu' ) ) { $url = parse_url( $video ); parse_str( $url[ 'query' ], $query ); $id = $query[ 'v' ]; $embed_code = "<iframe width='560' height='315' src='//www.youtube.com/embed/{$id}' frameborder='0' allowfullscreen></iframe>";}
$video = 'https://www.youtube.com/watch?v=Lcvh0DgytH8';
ПРЕОБРАЗОВАТЬ ССЫЛКИ НА ВИДЕО В HTML КОД ПЛЕЕРАЗАДАЧА
if( false !== mb_strpos( $video, 'youtu' ) ) { $url = parse_url( $video ); parse_str( $url[ 'query' ], $query ); $id = $query[ 'v' ]; $embed_code = "<iframe width='560' height='315' src='//www.youtube.com/embed/{$id}' frameborder='0' allowfullscreen></iframe>";}
$embed_code = wp_oembed_get( $video );
$video = 'https://www.youtube.com/watch?v=Lcvh0DgytH8';
ПРЕОБРАЗОВАТЬ ССЫЛКИ НА ВИДЕО В HTML КОД ПЛЕЕРАЗАДАЧА
$dir = get_template_directory();
СОЗДАТЬ ВРЕМЕННЫЙ ФАЙЛ С УНИКАЛЬНЫМ ИМЕНЕМЗАДАЧА
do { $filename = uniqid();}while( file_exists( $dir . DIRECTORY_SEPARATOR . $filename ) );touch( $dir . DIRECTORY_SEPARATOR . $filename );
$dir = get_template_directory();
СОЗДАТЬ ВРЕМЕННЫЙ ФАЙЛ С УНИКАЛЬНЫМ ИМЕНЕМЗАДАЧА
do { $filename = uniqid();}while( file_exists( $dir . DIRECTORY_SEPARATOR . $filename ) );touch( $dir . DIRECTORY_SEPARATOR . $filename );
$filename = wp_tempnam( null, $dir );
$dir = get_template_directory();
СОЗДАТЬ ВРЕМЕННЫЙ ФАЙЛ С УНИКАЛЬНЫМ ИМЕНЕМЗАДАЧА
$number = 83; $length = 5;
ДОПОЛНИТЬ ЧИСЛО НУЛЯМИ ДО НУЖНОГО КОЛИЧЕСТВА СИМВОЛОВЗАДАЧА
$string = sprintf( '%0' . $length . 's', $number );
$number = 83; $length = 5;
ДОПОЛНИТЬ ЧИСЛО НУЛЯМИ ДО НУЖНОГО КОЛИЧЕСТВА СИМВОЛОВЗАДАЧА
$string = sprintf( '%0' . $length . 's', $number );
$string = $number;for( $i = mb_strlen( $number ); $i < $length; $i++ ) { $string = 0 . $string; }
$number = 83; $length = 5;
ДОПОЛНИТЬ ЧИСЛО НУЛЯМИ ДО НУЖНОГО КОЛИЧЕСТВА СИМВОЛОВЗАДАЧА
$string = sprintf( '%0' . $length . 's', $number );
$string = $number;for( $i = mb_strlen( $number ); $i < $length; $i++ ) { $string = 0 . $string; }
$string = zeroise( $number, $length )
$number = 83; $length = 5;
ДОПОЛНИТЬ ЧИСЛО НУЛЯМИ ДО НУЖНОГО КОЛИЧЕСТВА СИМВОЛОВЗАДАЧА
$jsonp_url = "/ajax/search/callback=?"; $message = "Hello World!";
ЗАДАТЬ JAVASCRIPT ПЕРЕМЕННЫЕ ИЗ PHPЗАДАЧА
wp_enqueue_script( 'my-script', $script_url, array( 'jquery' ) );echo "<script> var MyScript = { jsonpUrl: '$jsonp_url', message: '$message' }; </script>";
$jsonp_url = "/ajax/search/callback=?"; $message = "Hello World!";
ЗАДАТЬ JAVASCRIPT ПЕРЕМЕННЫЕ ИЗ PHPЗАДАЧА
wp_enqueue_script( 'my-script', $script_url, array( 'jquery' ) );echo "<script> var MyScript = { jsonpUrl: '$jsonp_url', message: '$message' }; </script>";
wp_enqueue_script( 'my-script', $script_url, array( 'jquery' ) );wp_localize_script( 'my-script', 'MyScript', array( 'jsonpUrl' => $jsonp_url, 'message' => $message ));
$jsonp_url = "/ajax/search/callback=?"; $message = "Hello World!";
ЗАДАТЬ JAVASCRIPT ПЕРЕМЕННЫЕ ИЗ PHPЗАДАЧА
ПОЛЕЗНЫЙ PHP САХАР
add_action( 'save_post', 'save_post_callback' );function save_post_callback( $post_id ) { /* some stuff */ }
Fatal error: Cannot redeclare save_post_callback()
ПОЛЕЗНЫЙ PHP САХАР
add_action( 'save_post', 'save_post_callback' );function save_post_callback( $post_id ) { /* some stuff */ }
Fatal error: Cannot redeclare save_post_callback()
add_action( 'save_post', 'save_post_type_callback' );function save_post_type_callback( $post_id ) { /* some stuff */ }
Fatal error: Cannot redeclare save_post_type_callback()
ПОЛЕЗНЫЙ PHP САХАР
add_action( 'save_post', 'save_post_callback' );function save_post_callback( $post_id ) { /* some stuff */ }
Fatal error: Cannot redeclare save_post_callback()
add_action( 'save_post', 'save_post_type_callback' );function save_post_type_callback( $post_id ) { /* some stuff */ }
Fatal error: Cannot redeclare save_post_type_callback()
add_action( 'save_post', 'the_save_post_type_callback' );function the_save_post_type_callback( $post_id ) { /* some stuff */ }
Fatal error: Cannot redeclare the_save_post_type_callback()
ПОЛЕЗНЫЙ PHP САХАР
add_action( 'save_post', 'save_post_callback' );function save_post_callback( $post_id ) { /* some stuff */ }
Fatal error: Cannot redeclare save_post_callback()
add_action( 'save_post', 'save_post_type_callback' );function save_post_type_callback( $post_id ) { /* some stuff */ }
Fatal error: Cannot redeclare save_post_type_callback()
add_action( 'save_post', 'the_save_post_type_callback' );function the_save_post_type_callback( $post_id ) { /* some stuff */ }
Fatal error: Cannot redeclare the_save_post_type_callback()
add_action( 'save_post', 'JUST_SAVE_THIS_F_POST' );function JUST_SAVE_THIS_F_POST( $post_id ) { /* some stuff */ }
Success!
ПОЛЕЗНЫЙ PHP САХАР
ПОЛЕЗНЫЙ PHP САХАР
add_action( 'save_post', function( $post_id ) { // some stuff});
class My_Plugin { public function register_actions() { add_action( 'save_post', array( $this, 'save_product_callback') ); add_action( 'save_post', array( $this, 'save_product_meta_callback') ); } private function save_product_callback( $post_id ) { // some stuff // some stuff } private function save_product_meta_callback( $post_id ) { // some stuff }}
Warning: cannot access private method My_Plugin::save_product_callback()
ПОЛЕЗНЫЙ PHP САХАР
class My_Awesome_Plugin { public function register_actions() { add_action( 'save_post', function( $post_id ) { $this->save_product_callback( $post_id ); $this->save_product_meta_callback( $post_id ); }); } private function save_product_callback( $post_id ) { // some stuff } private function save_product_meta_callback( $post_id ) { // some stuff }}}
ПОЛЕЗНЫЙ PHP САХАР
$post_ids = array_map( function( $post ) { return $post->ID;}, $posts );
$published_posts = array_filter( $posts , function( $post ) { return $post->post_status == 'publish';});
usort( $posts, function( $post_one, $post_two ) { return strcmp( $post_one->post_title, $post_two->post_title );});
ПОЛЕЗНЫЙ PHP САХАР