Last active
April 21, 2022 08:49
-
-
Save Alex-Space/9640b4025a6317f1e6a8 to your computer and use it in GitHub Desktop.
doc WordPress
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******** Plugin creation ********/ | |
# Первые шаги в WP: | |
1) plugins(wp_content/plugins) | |
2) Там создаем папку с названием плагина в ней одноименный файлик .php | |
3) В него добавляем информацию о плагине, чтобы WP определил его в админке | |
4) Создаем файлик readme.txt, в котором пишем описание плагина (пример - https://wordpress.org/plugins/about/readme.txt) | |
5) Домашнаяя страница для плагина, в ней рассказывается о том как его установить, какие версии WP совместимы с плагином, что менялось от версии к версии вашего плагина, и как его использовать. | |
# В главный файл плагина в самое начало: | |
<?php | |
/* | |
Plugin Name: Название плагина | |
Plugin URI: http://страница_с_описанием_плагина_и_его_обновлений | |
Description: Краткое описание плагина. | |
Version: Номер версии плагина, например: 1.0 | |
Author: Имя автора плагина | |
Author URI: http://страница_автора_плагина | |
*/ | |
?> | |
# Хуки | |
Бывают 2 видов: actions & filters | |
actions - позволяет изменять, или дополнять возможности WP | |
filters - позволяет изменять, или фильтровать контент | |
# 2 необходимых хука для создания плагина | |
register_activation_hook() - Регистрирует функцию, которая вызывается, когда активируем плагин | |
register_deactivation_hook() - Регистрирует функцию, которая вызывается, когда деактивируем плагин | |
register_uninstall_hook() - Регистрирует функцию, которая вызывается при удалении плагина, чтобы почистить все следы прибывания плагина в системе. (лучше ее не использовать, вместо этого создать uninstall.php, при удалении плагина он сам исполнится) | |
# Дочерняя тема - создаем style.css в папке паралельно с темой, и кладем туда следующий код: | |
/* | |
Theme Name: Twenty Ten Child | |
Theme URI: http: //example.com/ | |
Description: Дочерняя тема для темы Twenty Ten | |
Author: Ваше имя | |
Author URI: http: //example.com/about/ | |
Template: twentyten | |
Version: 0.1.0 | |
*/ | |
@import url("../НАЗВАНИЕ ТЕМЫ С КОТОРОЙ КЛОНИРУЕМ/style.css"); | |
# Получить и вывести путь к директории плагина (несколько вариантов) | |
define('PLUGIN_DIR', plugin_dir_path(__FILE__)); | |
define('PLUGIN_URL', plugin_dir_url(__FILE__)); | |
plugins_url('путь от директории плагина + название файла.js', __FILE__), array('jquery')); | |
# Получить и вывести путь к директории дочерней темы (несколько вариантов) | |
<?php bloginfo('stylesheet_directory'); ?> | |
<?php echo get_stylesheet_directory_uri(); ?> | |
# Как подключить свою версию jQuery вместо дефолтной в ядре WP | |
<?php | |
function my_scripts_method() { | |
wp_deregister_script( 'jquery' ); | |
wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'); | |
wp_enqueue_script( 'jquery' ); | |
} | |
add_action( 'wp_enqueue_scripts', 'my_scripts_method' ); | |
?> | |
# Добавить фавиконку в дочернюю тему | |
function blog_favicon() { | |
echo '<link rel="Shortcut Icon" type="image/x-icon" href="'.get_bloginfo('wpurl').'/favicon.ico" />'; | |
} | |
add_action('wp_head', 'blog_favicon'); | |
?> | |
# Создание страницы настроек для плагина (это все в начала главного файла плагина) | |
add_action( 'admin_menu', 'spl_admin_menu' ); | |
function spl_admin_menu() { | |
add_options_page( | |
'Свойства' . SPL_PLUGIN_NAME, // заголовок страницы, title | |
SPL_PLUGIN_NAME, // название пункта меню | |
8, // права доступа к странице setting | |
SPL_OPTION_ID, // слаг для url, можно здесь указать FILE, тогда в адресе просто будет название папки с плагином и название файла плагина | |
'spl_option_page' // функция генерации элементов, полей для страницы | |
); | |
} | |
function spl_option_page() { | |
include 'options.php'; | |
} | |
# Поднять в иерархии элементы админ меню | |
function admin_menu_items() { | |
global $menu; | |
$menu[10]=$menu[26]; // тут пишем позицию на какое место ставим то, что нужно | |
$menu[26] = array(); // тут избавляемся от дубликата, который остается | |
} | |
add_action('admin_menu', 'admin_menu_items'); | |
# Поднять в иерархии кастомный тип записей (добавить в парамерты $args) | |
'menu_position' => 5, // 5 - это сразу под Posts | |
# К верхнему примеру пояснение в числах | |
5 - below Posts | |
10 - below Media | |
15 - below Links | |
20 - below Pages | |
25 - below comments | |
60 - below first separator | |
65 - below Plugins | |
70 - below Users | |
75 - below Tools | |
80 - below Settings | |
100 - below second separator | |
# Добавление поддержки разных метаполей в кастомные типы записей (в данном примере использую добавление миниатюр) | |
function add_thumb() { | |
add_post_type_support('gallery', array('thumbnail') ); | |
} | |
add_action( 'init', 'add_thumb' ); | |
# Добавить еще один размер для картинок, которые режет WP при загрузке | |
add_image_size( 'ThumbForAbout', 590, 886, true ); | |
# Дебаг мод для разработки и отладки ошибок в wordpress. Добавляется в wp-config.php (советуют использовать только на сайте в разработке, потом нужно отключить) | |
define('WP_DEBUG', true); | |
# Создает файлик и пишет туда все возникающие ошибки. Код добавлять в wp-config.php (/wp-content/debug.log) | |
define('WP_DEBUG_LOG', true); | |
# Для карсивого вывода данных ( пишем в functions.php и вызываем где надо в коде pr(); exit; ) | |
function pr($data) { | |
echo '<pre>'; | |
print_r($data); | |
echo '</pre>'; | |
} | |
# Убрать текстовое поле для конкретного шаблона страницы | |
function hide_editor() { | |
// Get the Post ID. | |
$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ; | |
if( !isset( $post_id ) ) return; | |
// Get the name of the Page Template file. | |
$template_file = get_post_meta($post_id, '_wp_page_template', true); | |
if($template_file == 'blog.php'){ // edit the template name | |
remove_post_type_support('page', 'editor'); | |
} | |
} | |
add_action( 'admin_init', 'hide_editor' ); | |
# Подключить стили и скрипты, или сделать проверку,если нужно на определенный шаблон (functions.php не работает) | |
is_page_template( 'название шаблона.php' ) | |
# То же самое только работает в function.php | |
$template_name = get_post_meta( $wp_query->post->ID, '_wp_page_template', true ); | |
if ( $template_name = 'portfolio.php' ) { | |
wp_enqueue_script( 'lightbox_script' ); | |
wp_enqueue_style( 'lightbox_styles' ); | |
} | |
# Создаем страницу настроек (скинул Илья) | |
function createOptionsPage() { | |
register_post_type( | |
'options', | |
array( | |
'labels' => array( | |
'name' => 'Theme settings' | |
), | |
'public' => true, | |
'menu_icon' => 'dashicons-screenoptions', | |
'menu_position' => 100, | |
'capabilities' => array( | |
'create_posts' => 'do_not_allow', | |
'delete_published_posts' => false | |
), | |
'map_meta_cap' => true, | |
'supports' => array( | |
'title' | |
) | |
) | |
); | |
function removeViewLink($actions) { | |
if(get_post_type() === 'options') { | |
unset( $actions['view']); | |
unset( $actions['inline hide-if-no-js']); | |
} | |
return $actions; | |
} | |
add_filter('post_row_actions', 'removeViewLink', 10, 1); | |
$checkSettingsPage = get_page_by_path('theme-settings', array(), 'options'); | |
if(empty($checkSettingsPage)) { | |
wp_insert_post( | |
array( | |
'post_title' => 'Theme settings', | |
'post_slug' => 'theme-settings', | |
'post_type' => 'options', | |
'post_status' => 'publish', | |
'post_author' => 1 | |
) | |
); | |
} | |
/ Get field slug from option page / | |
function getOptionsField($fieldName) { | |
$optionsPageId = get_page_by_path('theme-settings', OBJECT, 'options')->ID; | |
$field = get_field($fieldName, $optionsPageId); | |
return $field; | |
} | |
} | |
add_action('init', 'createOptionsPage'); | |
# Подключить любой файл в любой шаблон ( парамерт функции - название файла в корне темы, но без .php) | |
get_template_part('page-nav'); | |
# Скрыть метатег генератор, который помогает определить что за движок используется на сайте | |
remove_action('wp_head', 'wp_generator'); | |
# Убрать возможность добавления постов через мобильные устройства. (для повышения защиты против хакеров) | |
add_filter('xmlrpc_enabled', '_return_false'); | |
remove_action('wp_head', 'rsd_link'); | |
remove_action('wp_head', 'wlwmanifest_link'); | |
# Так же хорошо добавить в .htaccess запред на просмотр файлов xmlrpc.php и wp-config.php | |
<Files xmlrpc.php> | |
order allow,deny | |
deny from all | |
</Files> | |
<Files wp_config.php> | |
order allow,deny | |
deny from all | |
</Files> | |
# Advanced custom fields repeater loop | |
<?php if( have_rows('repeater_field_name') ) : while ( have_rows('repeater_field_name') ) : the_row(); ?> | |
<?php the_sub_field('sub_field_name'); ?> | |
<?php endwhile; ?> | |
<?php else : ?> | |
<?php endif; ?> | |
# Вывести похожие записи по тегам | |
<div class="relatedposts"> | |
<h3>Related posts</h3> | |
<?php | |
$orig_post = $post; | |
global $post; | |
$tags = wp_get_post_tags($post->ID); | |
if ($tags) { | |
$tag_ids = array(); | |
foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id; | |
$args=array( | |
'tag__in' => $tag_ids, | |
'post__not_in' => array($post->ID), | |
'posts_per_page'=>4, // Number of related posts to display. | |
'caller_get_posts'=>1 | |
); | |
$my_query = new wp_query( $args ); | |
while( $my_query->have_posts() ) { | |
$my_query->the_post(); | |
?> | |
<div class="relatedthumb"> | |
<a rel="external" href="<? the_permalink()?>"><?php the_post_thumbnail(array(150,100)); ?><br /> | |
<?php the_title(); ?> | |
</a> | |
</div> | |
<?php } | |
} | |
$post = $orig_post; | |
wp_reset_query(); | |
?> | |
</div> | |
# Вывести сайдбар по имени или по ID | |
dynamic_sidebar( 'Sidebar for video post' ); | |
# Добавить поддержку тегов к кастомой сущности | |
'taxonomies' => array('post_tag') | |
# Установить необходимые параметры для результатов поиска ( искать в каких типах постов ) | |
function search_filter( $query ) { | |
if ( $query->is_search ) { | |
$query->set( 'post_type', array( 'items' ) ); | |
} | |
return $query; | |
} | |
add_filter( 'pre_get_posts', 'search_filter' ); | |
# Отключить кеширование скриптов или стилей ( дописываем null, time() ) | |
wp_register_style( 'кастомное название', get_template_directory_uri() . '/путь до файла', null, time() ); | |
# Позволяет вывести столько символов, сколько нужно без обрезки слова (Использовать - echo get_excerpt(21) ) | |
function get_excerpt($limit, $source = null){ | |
if($source == "content" ? ($excerpt = get_the_content()) : ($excerpt = get_the_excerpt())); | |
$excerpt = preg_replace(" (\[.*?\])",'',$excerpt); | |
$excerpt = strip_shortcodes($excerpt); | |
$excerpt = strip_tags($excerpt); | |
$excerpt = substr($excerpt, 0, $limit); | |
$excerpt = substr($excerpt, 0, strripos($excerpt, " ")); | |
$excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt)); | |
$excerpt = '<p>' . $excerpt . '...</p>'; | |
return $excerpt; | |
} | |
# Получить категорию в которой находимся | |
$cat_name = single_cat_title( '', false ); | |
# Перебивает дефолтное значение для количества вывода постов, используется при навигации (Поисковая страница в том числе) | |
function wpm_set_posts( $query ) { | |
$query->set( 'posts_per_page', '7' ); | |
} | |
add_action( 'pre_get_posts', 'wpm_set_posts' ); | |
# Чтобы тема поддерживала Woocommecre | |
add_action( 'after_setup_theme', 'woocommerce_support' ); | |
function woocommerce_support() { | |
add_theme_support( 'woocommerce' ); | |
} | |
# Удалить из админбара | |
function remove_admin_bar_links() { | |
global $wp_admin_bar; | |
$wp_admin_bar->remove_menu('wp-logo'); // Remove the WordPress logo | |
$wp_admin_bar->remove_menu('about'); // Remove the about WordPress link | |
$wp_admin_bar->remove_menu('wporg'); // Remove the WordPress.org link | |
$wp_admin_bar->remove_menu('documentation'); // Remove the WordPress documentation link | |
$wp_admin_bar->remove_menu('support-forums'); // Remove the support forums link | |
$wp_admin_bar->remove_menu('feedback'); // Remove the feedback link | |
$wp_admin_bar->remove_menu('site-name'); // Remove the site name menu | |
$wp_admin_bar->remove_menu('view-site'); // Remove the view site link | |
$wp_admin_bar->remove_menu('updates'); // Remove the updates link | |
$wp_admin_bar->remove_menu('comments'); // Remove the comments link | |
$wp_admin_bar->remove_menu('new-content'); // Remove the content link | |
$wp_admin_bar->remove_menu('w3tc'); // If you use w3 total cache remove the performance link | |
$wp_admin_bar->remove_menu('my-account'); // Remove the user details tab | |
$wp_admin_bar->remove_menu('customize'); // Remove customize menu | |
} | |
add_action( 'wp_before_admin_bar_render', 'remove_admin_bar_links' ); | |
# Кастомные колонки в таблице постов из кастомных полей этих постов | |
function modify_post_table( $column ) { | |
$column['product_name'] = 'Product Name'; | |
$column['minimum_principle'] = 'Minimum Principle'; | |
$column['age_grouping'] = 'Age Grouping'; | |
return $column; | |
} | |
add_filter( 'manage_products_posts_columns', 'modify_post_table' ); | |
# Если добавить картинку после чекбокса слева в таблице, то этот код это делает | |
foreach ( $column as $key => $value ) { | |
$new_arr[$key] = $value; | |
if ( $key == 'cb' ) { | |
$new_arr = $new_arr + $product_arr; | |
} | |
} | |
# Подсказка хук такой manage_${post_type}_posts_columns | |
function modify_post_table_row( $column_name, $post_id ) { | |
if( $column_name == 'product_name' ) { | |
$product_name = get_post_meta( $post_id, 'product_name', true ); | |
echo $product_name; | |
} | |
if( $column_name == 'minimum_principle' ) { | |
$minimum_principle = get_post_meta( $post_id, 'minimum_principle', true ); | |
echo $minimum_principle; | |
} | |
if( $column_name == 'age_grouping' ) { | |
$age_grouping = get_post_meta( $post_id, 'age_grouping', true ); | |
echo $age_grouping; | |
} | |
} | |
add_action( 'manage_products_posts_custom_column', 'modify_post_table_row', 10, 2 ); | |
#manage_posts_custom_column - для обычного поста | |
# Фикс бага для Contact form 7 validation email adress | |
# Добавить в wp-config.php | |
define( 'WPCF7_VALIDATE_CONFIGURATION', false ); | |
# Чтобы сработали хуки от qtranslate-x | |
function community_qtranslate_detect_language( $url_info ) { | |
$url_info['language'] = 'en'; | |
return $url_info; | |
} | |
add_filter( 'qtranslate_detect_language', 'community_qtranslate_detect_language'); | |
qtranxf_init_language(); | |
############################# WooCommerce ############################ | |
# Убрать обязательные поля на My account | |
function wpm_change_required_fields( $fields ) { | |
unset( $fields['account_last_name'] ); | |
unset( $fields['account_first_name'] ); | |
} | |
add_filter( 'woocommerce_save_account_details_required_fields', 'wpm_change_required_fields' ); | |
# Отключить дурацкую валидацию полей в Contact form 7 (в wp-config.php) | |
define( 'WPCF7_VALIDATE_CONFIGURATION', false ); | |
# Изменить ограничение на размер загружаемого файла | |
function PBP_increase_upload( $bytes ) { | |
return 10485760; | |
} | |
add_filter( 'upload_size_limit', 'PBP_increase_upload' ); | |
# Вход-выход для WooCommerce | |
function add_loginout_link( $items, $args ) { | |
if (is_user_logged_in() && $args->theme_location == 'primary-menu') { | |
$items .= '<li><a href="'. wp_logout_url( get_permalink( woocommerce_get_page_id( 'myaccount' ) ) ) .'">Выйти</a></li>'; | |
} | |
elseif (!is_user_logged_in() && $args->theme_location == 'primary-menu') { | |
$items .= '<li><a href="' . get_permalink( woocommerce_get_page_id( 'myaccount' ) ) . '">Войти</a></li>'; | |
} | |
return $items; | |
} | |
add_filter( 'wp_nav_menu_items', 'add_loginout_link', 10, 2 ); | |
# Поменять валюту в woocommerce | |
function add_inr_currency( $currencies ) { | |
$currencies['RUB'] = 'руб.'; | |
return $currencies; | |
} | |
add_filter( 'woocommerce_currencies', 'add_inr_currency' ); | |
function add_inr_currency_symbol( $symbol ) { | |
$currency = get_option( 'woocommerce_currency' ); | |
switch( $currency ) { | |
case 'RUB': $symbol = 'руб.'; break; | |
} | |
return $symbol; | |
} | |
add_filter( 'woocommerce_currency_symbol', 'add_inr_currency_symbol' ); | |
# Отключить миграцию со старой версии jQuery | |
add_action( 'wp_default_scripts', function( $scripts ) { | |
if ( ! empty( $scripts->registered['jquery'] ) ) { | |
$jquery_dependencies = $scripts->registered['jquery']->deps; | |
$scripts->registered['jquery']->deps = array_diff( $jquery_dependencies, array( 'jquery-migrate' ) ); | |
} | |
} ); | |
# Чтобы фильтровать дробные поля через meta_query ( в WP баг ) | |
function cast_decimal_precision( $array ) { | |
$array['where'] = str_replace('DECIMAL','DECIMAL(10,4)',$array['where']); | |
return $array; | |
} | |
add_filter('get_meta_sql','cast_decimal_precision'); | |
# Поменять через хук статус поста ( пост статус post status ) | |
function wpm_check_published_post( $ID, $post ) { | |
remove_action('save_post', 'wpm_check_published_post'); | |
$my_post = array(); | |
$my_post['ID'] = $ID; | |
$my_post['post_status'] = 'draft'; | |
wp_update_post( $my_post ); | |
add_action('save_post', 'wpm_check_published_post'); | |
} | |
add_action( 'save_post', 'wpm_check_published_post', 10, 2 ); | |
# Получить все доступные размеры картинок на сайте | |
global $_wp_additional_image_sizes; | |
print '<pre>'; | |
print_r( $_wp_additional_image_sizes ); | |
print '</pre>'; | |
# Ajax login | |
function ajaxLogin() { | |
check_ajax_referer('ajax-login-nonce', 'security'); | |
$userData = array(); | |
$userData['user_login'] = $_POST['username']; | |
$userData['user_password'] = $_POST['password']; | |
$userData['remember'] = true; | |
$userSignIn = wp_signon($userData, false); | |
if(is_wp_error($userSignIn)){ | |
echo json_encode(array('loggedin' => false, 'message' => 'Wrong username or password.')); | |
} else { | |
echo json_encode(array('loggedin' => true, 'message'=> 'Login successful.')); | |
} | |
die(); | |
} | |
add_action('wp_ajax_nopriv_ajaxLogin', 'ajaxLogin'); | |
# Создание таблиц в плагинах | |
global $wpdb; | |
$ac_productmeta = $wpdb->prefix . "ac_productmeta"; | |
if( $wpdb->get_var("SHOW TABLES LIKE '$ac_productmeta'") != $ac_productmeta ) { | |
// If table not in database. Create new table | |
$charset_collate = $wpdb->get_charset_collate(); | |
$sql = "CREATE TABLE $ac_productmeta ( | |
id mediumint(9) NOT NULL AUTO_INCREMENT, | |
product_id mediumint NOT NULL, | |
product_quantity mediumint, | |
product_SKU varchar(255), | |
product_meta_key varchar(255), | |
product_meta_value longtext, | |
UNIQUE KEY id (id) | |
) $charset_collate;"; | |
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); | |
dbDelta( $sql ); | |
} | |
# Изменить тайтл у метабокса в админке и тайтл добавления картинки в самом метабоксе | |
function km_change_featured_image_metabox_title() { | |
remove_meta_box( 'postimagediv', 'my_post_type_name', 'side' ); | |
add_meta_box( 'postimagediv', __( 'NEW TITLE TEXT', 'km' ), 'post_thumbnail_meta_box', 'my_post_type_name', 'side' ); | |
} | |
add_action('do_meta_boxes', 'km_change_featured_image_metabox_title' ); | |
function km_change_featured_image_text( $content ) { | |
if ( 'my_post_type_name' === get_post_type() ) { | |
$content = str_replace( 'Set featured image', __( 'NEW SET TEXT HERE', 'km' ), $content ); | |
$content = str_replace( 'Remove featured image', __( 'NEW REMOVE TEXT HERE', 'km' ), $content ); | |
} | |
return $content; | |
} | |
add_filter( 'admin_post_thumbnail_html', 'km_change_featured_image_text' ); | |
# Изменить текст кнопки в Media Uploader | |
// Change button text in Media uploader | |
function wpse_41767_change_image_button( $translation, $text, $domain ) | |
{ | |
if ( 'default' == $domain and 'Insert into post' == $text ) | |
{ | |
// Once is enough. | |
remove_filter( 'gettext', 'wpse_41767_change_image_button' ); | |
return 'Use this'; | |
} | |
return $translation; | |
} | |
add_filter( 'gettext', 'wpse_41767_change_image_button', 10, 3 ); | |
# Core metabox callbacks ( для кастомизации метабоксов ) | |
'post_thumbnail_meta_box' - Featured Image metabox | |
'post_slug_meta_box' - Slug metabox | |
'post_author_meta_box' - Author metabox | |
'post_categories_meta_box' - Categories metabox | |
'post_format_meta_box' - Formats metabox | |
'post_comment_meta_box' - Comments metabox | |
'post_comment_status_meta_box' - Comments Status metabox | |
'post_tags_meta_box' - Tags metabox | |
'post_submit_meta_box' - Submit metabox | |
'post_custom_meta_box' - Custom Fields metabox | |
'post_revision_meta_box' - Post Revisions metabox | |
# Core Meta Box IDs | |
'commentstatusdiv' - Comments status metabox (discussion). | |
'commentsdiv' - Comments metabox. | |
'slugdiv' - Slug metabox. | |
'revisionsdiv' - Revisions metabox. | |
'authordiv' - Author metabox. | |
'postcustom' - Custom fields metabox. | |
'postexcerpt' - Excerpt metabox. | |
'trackbacksdiv' - Trackbacks metabox. | |
'postimagediv' - Featured image metabox. | |
'formatdiv' - Formats metabox. | |
'tagsdiv-post_tag' - Tags metabox. | |
'categorydiv' - Categories metabox. | |
'pageparentdiv' - Attributes metabox. | |
# Используется вместе с этими функциями : | |
remove_meta_box( 'postexcerpt', 'post', 'side' ); | |
add_meta_box('postexcerpt', __('Post Summary'), 'post_excerpt_meta_box', 'post', 'normal', 'high'); | |
# и они вешаются на хук do_meta_boxes | |
# Добавить поля в таблицу с термами таксономии в админке | |
function ac_modify_ac_category_table( $column ) { | |
$product_arr = array( 'image' => 'Image' ); | |
$new_arr = array(); | |
foreach ( $column as $key => $value ) { | |
$new_arr[$key] = $value; | |
if ( $key == 'cb' ) { | |
$new_arr = $new_arr + $product_arr; | |
} | |
} | |
return $new_arr; | |
} | |
add_filter( 'manage_edit-ac_category_columns', 'ac_modify_ac_category_table' ); | |
// Add thumbnail image to thumbnail column in post table in admin panel | |
function ac_modify_ac_category_table_row( $empty, $column_name, $term_id ) { | |
if( $column_name == 'image' ) { | |
$cat_image = get_term_meta( $term_id, 'ac_category_image' ); | |
echo '<span class="helper"></span><img src="' . $cat_image[0] . '" alt="" class="term-column-thumb">'; | |
} | |
} | |
add_action( 'manage_ac_category_custom_column', 'ac_modify_ac_category_table_row', 10, 3 ); | |
# Показать все хуки, которые исполняются на странице | |
$debug_tags = array(); | |
add_action( 'all', function ( $tag ) { | |
global $debug_tags; | |
if ( in_array( $tag, $debug_tags ) ) { | |
return; | |
} | |
echo "<pre>" . $tag . "</pre>"; | |
$debug_tags[] = $tag; | |
} ); | |
# Получить все скрипты, которые зарегистрированы и подключены | |
function wpa54064_inspect_scripts() { | |
global $wp_scripts; | |
foreach( $wp_scripts->queue as $handle ) : | |
echo $handle . ' | '; | |
endforeach; | |
} | |
add_action( 'wp_print_scripts', 'wpa54064_inspect_scripts' ); | |
# Отключить валидацию на Contact form 7: | |
# Using wp-config.php | |
define( 'WPCF7_VALIDATE_CONFIGURATION', false ); | |
# Using functions.php | |
add_filter( 'wpcf7_validate_configuration', '__return_false' ); | |
# Удалить дефолтные колонки в таблице постов в админке | |
function my_manage_columns( $columns ) { | |
unset($columns['date']); | |
return $columns; | |
} | |
function my_column_init() { | |
add_filter( 'manage_ac_catalog_item_posts_columns' , 'my_manage_columns' ); | |
} | |
add_action( 'admin_init' , 'my_column_init' ); | |
# Добавить ссылки на страницу настроек плагина в списке плагинов | |
function plugin_add_settings_link( $links ) { | |
$settings_link = '<a href="options-general.php?page=plugin_name">' . __( 'Settings' ) . '</a>'; | |
array_push( $links, $settings_link ); | |
return $links; | |
} | |
$plugin = plugin_basename( __FILE__ ); | |
add_filter( "plugin_action_links_$plugin", 'plugin_add_settings_link' ); | |
# Пагинация, которая работает с кастомным циклом кастомных записей ( ну и естественно перед циклом, и это переменную в 'paged' эл. массива - $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; ) | |
$big = 999999999; // need an unlikely integer | |
$translated = __( 'Page', 'mytextdomain' ); // Supply translatable string | |
echo paginate_links( array( | |
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), | |
'format' => '?paged=%#%', | |
'current' => max( 1, get_query_var('paged') ), | |
'total' => $wp_query->max_num_pages, | |
'before_page_number' => '<span class="screen-reader-text">'.$translated.' </span>' | |
) ); | |
# Подключить стили для визивиг TinyMCE редактора | |
function my_theme_add_editor_styles() { | |
add_editor_style( get_stylesheet_directory_uri() . '/css/editor.css'); | |
} | |
add_action( 'current_screen', 'my_theme_add_editor_styles' ); | |
# Валидация полей в WooCommerce ( сначала добавляем их в нашатема/cabinet/woocommerce/myaccount/form-login.php) | |
function wooc_validate_extra_register_fields( $username, $email, $validation_errors ) { | |
if ( ! isset( $_POST['agreeaferta'] ) && $_POST['agreeaferta'] !== 'on' ) { | |
$validation_errors->add( 'agreeaferta_error', 'Вы не приняли условия оферты!' ); | |
} | |
return $validation_errors; | |
} | |
add_action( 'woocommerce_register_post', 'wooc_validate_extra_register_fields', 10, 3 ); | |
# Изменить в WooCommerce поля и убрать валидацию | |
function storefront_child_remove_checkout_fields($fields) { | |
unset( $fields ['account_first_name'] ); | |
unset( $fields ['account_last_name'] ); | |
return $fields; | |
} | |
add_filter( 'woocommerce_save_account_details_required_fields', 'storefront_child_remove_checkout_fields' ); | |
# Ссылка на дефолтную миниатюру товара woocommerce | |
wc_placeholder_img_src() | |
# Проверка, есть ли такая таблица в базе данных | |
global $wpdb; | |
$table_name = $wpdb->prefix.'TABLE-NAME-HERE'; | |
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) { | |
//table not in database. Create new table | |
$charset_collate = $wpdb->get_charset_collate(); | |
$sql = "CREATE TABLE $table_name ( | |
id mediumint(9) NOT NULL AUTO_INCREMENT, | |
field_x text NOT NULL, | |
field_y text NOT NULL, | |
UNIQUE KEY id (id) | |
) $charset_collate;"; | |
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); | |
dbDelta( $sql ); | |
} | |
else{ | |
} | |
############################## Полезная инфа ############################## | |
############################## Ссылки ############################## | |
############################## Плагины ############################## | |
# Замена уролов в SRDBM | |
/188.166.67.51/dragon\ | |
/smart-space-shop\ | |
https://toster.ru/q/204812 - тема вн Тостере, где советуют литературу по WP | |
https://developer.wordpress.org/resource/dashicons/ - иконки для Wordpress dashboard | |
https://codex.wordpress.org/Function_Reference/wp_enqueue_script - все что входить в ядро WP, чего там только нет, надо только подключить при желании использовать | |
https://github.com/TGMPA/TGM-Plugin-Activation - плагин, который тянет при установки темы все остальные плагины,котоыре используются в теме | |
https://github.com/Vestride/Shuffle/blob/master/LICENSE - классный фильтр для портфолио MIT лицензия | |
http://adambrown.info/p/wp_hooks/hook - wordpress hooks все хуки | |
http://codex.wordpress.org/%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D1%8B_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_PHP - стайл гайл по PHP от Wordpress | |
http://snippets.webaware.com.au/snippets/woocommerce-add-to-cart-with-quantity-and-ajax/ - Woocommecre add to cart ajax | |
http://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ - add fields to checkout page WooCommerce | |
http://weareoutman.github.io/clockpicker/ - timepicker крутой | |
http://wpscan.org/ - сайт, который ищет уязвимости в WP | |
http://www.cssauthor.com/bootstrap-admin-templates/ - 50 бесплатных тем для админки WP | |
# Крутые сайты на WP | |
https://puzzle-english.com | |
http://newbornbaby.com.au/ - крутой сайт на WP, который делал Илья (самое крутое, что я видел) | |
http://www.expandintheusa.com/speakers/ - крутой сайт на WP, который делал Илья | |
# Плагины на сублайм | |
Wordpress Generate Salts - генерирует соль (ctrl+alt+g) | |
# Переводы | |
https://codex.wordpress.org/Function_Reference/load_textdomain - глобальная переменная $l10n которая содержит все переводы | |
# Не исследовано | |
https://wordpress.org/plugins/s2member/ - крутой фреймворк-плагин по управлению пользователями и их защите, с Пейпалом что-то связано (изучить) | |
http://www.farinspace.com/wpalchemy-metabox/ - класс по легкому созданию метабоксов в своем плагине, или теме | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment