Skip to content

Instantly share code, notes, and snippets.

@eto4detak
Created June 15, 2017 18:07
Show Gist options
  • Save eto4detak/293f61f340e2b99b4dfa647aacf00614 to your computer and use it in GitHub Desktop.
Save eto4detak/293f61f340e2b99b4dfa647aacf00614 to your computer and use it in GitHub Desktop.
wp данные для плагина
<?php
/*
Plugin Name: MiniWidget
Plugin URI: http ://example.com/wordpress-plugins/halloween-plugin
Description: This is a brief description of my plugin
Version: 1.0
Author: ANATOLI
Author URI: http://example.com
License: GPLv2
*/
register_activation_hook( __FILE__ , 'prowp_install' );
function prowp_install() {
global $wp_version;
if ( version_compare( $wp_version, '3.5', '<' ) ) {
wp_die( 'This plugin requires WordPress version 3.5 or higher.' );
}
}
?>
<?php
register_deactivation_hook( FILE , 'prowp_deactivate()' );
function prowp_deactivate() {
// делаем то, что нужно
>
?>
/*========================================================
защита от подделки межсайтовых запросов (CSRF)
wp_nonce_field() - число, использованное единожды
prowp_settings_form_save - уникальная строка, описание действия
prowp_nonce_field - уникальное поле
========================================================*/
<form method="post">
<?php wp_nonce_field( 'prowp_settings_form_save', 'prowp_nonce_field' ); ?>
Enter your name:
<input type="text" name="text" >
<br/>
<input type="submit" name="submit" value="Save Options" />
</form>
<?php
function prowp_update_options() {
if ( isset( $_POST['submit'] ) ) {
// проверяем временное значение из соображений безопасности
check_admin_referer( 'prowp_settings_form_save', 'prowp_nonce_field' );
// проверка произведена, теперь делаем то, что нужно
}
}?>
<?php
$link = 'my-url.php?action=delete&ID=15';
?>
<a href="<?php echo wp_nonce_url( $link, 'prowp_nonce_url_check' ); ?>">Delete</a>
<!-- Вы видите, что функция sanitize_email() удаляет все дополнительные пробелы
и непригодные символы из присланного электронного адреса -->
<?php
$sanitized_email = sanitize_email( ' !ric@loremipsum.com!' );
echo $sanitized email; // отобразит: ric@loremipsum.com
// wp_kses - обрезка тегов
$allowed_tags = array(
'strong' =>
array (),
'a' => array(Знай свои зацепки: действия и фильтры 195
'href' => array(),
'title' => array()
)
);
$html = '
<a href="#" class="external">link</a>
. This is <b>bold</b>
and <strong>strong</strong>
';
echo wp_kses( $html, $allowed_tags );
?>
<?php
$bodytag = str_ireplace("%body%", "black", "<body text=%BODY%>
");
echo $bodytag; //
<body text=black>
?>
/*========================================================
* гугл аналитика на все страниц
========================================================*/
<?php
add_action( 'wp_footer', 'prowp_site_analytics' );
function prowp_site_analytics() {
?>
<script type="text/javascript">
var gaDsHost = (("https:" == document.location.protocol) ?
"https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaDsHost +
'google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-XXXXXX-XX");
pageTracker._trackPageview();
</script>
<?php
}
?>
/*========================================================
* добавить данныне плагины
========================================================*/
<?php add_option( 'prowp_display_mode', 'Fright Night' ); ?>
<?php$prowp_options_arr = array(
'prowp_display_mode' =>
'Fright Night',
'prowp_default_browser' => 'Chrome',
'prowp_favorite_book' => 'Professional WordPress',
);
update_option( 'prowp_plugin_options', $
);
?>
<?php $prowp_options_arr = get_option( 'prowp_plugin_options' );
$prowp_display_mode = $prowp_options_arr['prowp_display_mode']; ?>
<?php delete_option( 'prowp_display_mode' ); ?>
/*========================================================
* add Menu
========================================================*/
<?php
// создаем произвольное меню для плагина
add_action( 'admin_menu', 'prowp_create_menu' );
function prowp_create_menu() {
// создаем новое меню верхнего уровня
add_menu_page( 'Halloween Plugin Page', 'Halloween Plugin',
'manage_options', 'prowp_main_menu', 'prowp_main_plugin_page',
plugins_url( '/images/wordpress.png', FILE ) );
// создаем подпункты меню: настройка и поддержка
add_submenu_page( 'prowp_main_menu', 'Halloween Settings Page',
'Settings', 'manage_options', 'halloween_settings',
'prowp_settings_page' );
add_submenu_page( 'prowp_main_menu', 'Halloween Support Page',
'Support', 'manage_options', 'halloween_support', 'prowp_support_page' );
// вызываем функцию для регистрации настроек
add_action( 'admin_init', 'prowp_register_settings' );
}
?>
<?php
function prowp_register_settings() {
// регистрируем настройки
//1й- имя группы параметров
//2й- иникальное имя
//3й- функия для очистки неверных значений и хака
register_setting( 'prowp-settings-group', 'prowp_options',
'prowp_sanitize_options' );
}?>
<!-- добавление подпункта меню в меню Настройки. -->
<?php
add_action( 'admin_menu', 'prowp_create_settings_submenu' );
function prowp_create_settings_submenu() {
// 1-название страниы
// 2-название подпункта
// 3-видимость меню(manage_options-только админы)
// 4-ID
// 5-функция для построения страницы параметров
add_options_page( 'Halloween Settings Page', 'Halloween Settings',
'manage_options', 'halloween_settings_menu', 'prowp_settings_page' );
>
?>
<?php
//
function prowp_settings_page() {
?>
<div class="wrap">
<h2>Halloween Plugin Options</h2>
<form method="post" action="options.php">
//settings_fields - связать с группой настроек задаваемой register_setting
<?php settings_fields( 'prowp-settings-group' ); ?>
//загрузить массив параметров
<?php $prowp_options = get_option( 'prowp_options' ); ?>
<table class="form-table">
<tr valign="top">
<th scope="row">Name</th>
//$prowp_options['option_name'] - переменная option_name
<td><input type="text" name="prowp_options[option_name]" value="<?php echo esc_attr( $prowp_options['option_name'] ); ?>" /></td>
</tr>
<tr valign="top">
<th scope="row">Email</th>
<td><input type="text" name="prowp_options[option_email]" value="<?php echo esc_attr( $prowp_options['option_email'] ); ?>" /></td>
</tr>
<tr valign="top">
<th scope="row">URL</th>
<td><input type="text" name="prowp_options[option_url]" value="<?php echo esc_url( $prowp_options['option_url'] ); ?>" /></td>
</tr>
</table>
<p class="submit">
<input type="submit" class="button-primary" value="Save Changes" />
</p>
</form>
</div>
<?php } ?>
<?php
function prowp_sanitize_options( $input ) {
$input['option_name'] = sanitize_text_field( $input['option_name'] );
$input['option_email'] = sanitize_email( $input['option_email'] );
$input['option_unl'] = esc_url( $input['option_url'] );
return $input;
}
?>
<?php
// выполняем функцию раздела настроек
add_action( 'admin_init', 'prowp_settings_init' );
function prowp_settings_init() {
// создаем новый раздел настроек в Параметры > Чтение
//1-ID
//2-название на выходе
//3-функция для отображения
//4-страница настроек: general, w riting, reading, discussion, media, privacy и permalink.
add_settings_section( 'prowp_setting_section', 'Halloween Plugin Settings', 'prowp_setting_section', 'reading' );
// регистрируем индивидуальные настройки
//1-ID
//2-название поля
//3-функция для отображения поля
//4-страница настроек: general, w riting, reading, discussion, media, privacy и permalink.
//5- имя раздела, в который добавляется поле
add_settings_field( 'prowp_setting_enable_id', 'Enable Halloween Feature?', 'prowp_setting_enabled', 'reading', 'prowp_setting_section' );
add_settings_field( 'prowp_saved_setting_name_id', 'Your Name', 'prowp_setting_name', 'reading', 'prowp_setting_section' );
// регистрируем настройки с помощью массива значений
//1-группа параметров
//2-имя парметра УНИКАЛЬНО
//3-НЕОБЯЗАТЕЛЬНО функция для доп очистки
register_setting( 'reading', 'prowp_setting_values', 'prowp_sanitize_settings' );
}
function prowp_sanitize_settings( $input ) {
$input['enabled'] = ( $input['enabled'] == 'on' ) ? 'on' : '';
$input['name'] = sanitize_text_field( $input['name'] );
return $input;
}
// задать подзаголовок для раздела настроек(инфа)
function prowp_setting_section() {
echo '<p>Configure the Halloween plugin options below</p>';
}
// отобразим поля
function prowp_setting_enabled() {
//получить настроики плагина
$prowp_options = get_option( 'prowp_setting_values' );
//отобразить форму с чексбоксами
//1-параметр для сравнения
//2-параметр для сравнения
//3-отображать значение или возвращать его
echo '<input '.checked( $prowp_options['enabled'], 'on', false ).' name="prowp_setting_values[enabled]" type="checkbox" /> Enabled';
}
// create the text field setting to save the name
function prowp_setting_name() {
//load the option value
$prowp_options = get_option( 'prowp_setting_values' );
//display the text form field
echo '<input type="text" name="prowp_setting_values[name]" value="'.esc_attr( $prowp_options['name'] ).'" />';
}
?>
<?php add_meta_box( $id, $title, $callback, $page, $context, $priority, $callback_args ); ?>
<!-- Каждый параметр помогает определить, где и как отображается метаполе.
$id (атрибут ID CSS для метаполя);
$title (название страницы, отображаемое в заголовке метаполя);
$callback (имя произвольной функции для отображения в информации метаполя);
$page (страница, на которой должно отображаться метаполе, — ' post' , 'page' или название индивидуального типа записи);
$context (часть страницы, в которой должно быть отображено метаполе, — 'normal', 'advanced' или 'side');
$priority (где именно в выбранной части страницы должно отображаться метаполе — 'high', 'core', 'default' или 'low');
$callback_args (аргументы для передачи функции обратного вызова). -->
<?php
add_action( 'add_meta_boxes', 'prowp_meta_box_init' );
// функции для добавления метаполя и сохранения данных
function prowp_meta_box_init() {
// создаем произвольное метаполе
add_meta_box( 'prowp-meta', 'Product Information', 'prowp_meta_box', 'post', 'side', 'default' );}
//отобразим мета-поля
function prowp_meta_box( $post, $box ) {
// извлекаем значения произвольного метаполя
$prowp_featured = get_post_meta( $post->ID, '_prowp_type', true );
$prowp_price = get_post_meta( $post->ID, '_prowp_price', true );
// временные значения из соображений безопасности
wp_nonce_field( plugin_basename( __FILE__ ), 'prowp_save_meta_box' );
// форма метаполя
echo '<p>Price: <input type="text" name="prowp_price" value="'.esc_attr( $prowp_price ).'" size="5" /></p>';
echo '<p>Type:
<select name="prowp_product_type" id="prowp_product_type">
<option value="0" ' .selected( $prowp_featured, 'normal', false ). '>Normal</option>
<option value="special" ' .selected( $prowp_featured, 'special', false ). '>Special</option>
<option value="featured" ' .selected( $prowp_featured, 'featured', false ). '>Featured</option>
<option value="clearance" ' .selected( $prowp_featured, 'clearance', false ). '>Clearance</option>
</select></p>';
}
// сохранить мотополя
add_action( 'save_post', 'prowp_save_meta_box' );
function prowp_save_meta_box( $post_id ) {
// обрабатываем данные формы, если установлена переменная $_POST
if( isset( $_POST['prowp_product_type'] ) ) {
// если включено автосохранение, пропускаем этап сохранения данных метаполя
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
//проверяем временное значение из соображений безопасности
check_admin_referer( plugin_basename( __FILE__ ), 'prowp_save_meta_box' );
// сохраняем данные метаполя в произвольных полях записи, используя префикс ID
//1-post_id
//2-имя метаполя если с _ то не отображает в редакторе записи
//3-новое значение матаключа
update_post_meta( $post_id, '_prowp_type', sanitize_text_field( $_POST['prowp_product_type'] ) );
update_post_meta( $post_id, '_prowp_price', sanitize_text_field( $_POST['prowp_price'] ) );
}}
?>
//отобразить мета поля где нада
<?php
$prowp_type = get_post_meta( $post->ID, '_prowp_type', true );
$prowp_price = get_post_meta( $post->ID, '_prowp_price', true );
echo '<p>Price: ' .esc_html( $prowp_price ). '</p>';
echo '<p>Type: ' .esc_html( $prowp_type ). '</p>';
?>
/*========================================================
* шорт коды
========================================================*/
<?php
function shortcode_callback( $atts ) {
//поставить атрибуты шорткода
// 1-масив стандарт
// 2-масив параметров
// 3-имя шорткода
$atts = shortcode_atts( array(
'foo' => 'no foo',
'bar' => 'default bar',
), $atts, 'bartag' );
return 'bartag: ' . esc_html($atts['foo']) . ' ' . esc_html($atts['bar']);
}
// в результате шоткод: [bartag foo="koala" bar="bears"]
// выведет: bartag: koala bears
?>
<?php
// Код shortcode atts: wp-includes/shortcodes.php
function shortcode_atts( $pairs, $atts, $shortcode = '' ) {
$atts = (array)$atts;
$out = array();
foreach ($pairs as $name => $default) {
if ( array_key_exists($name, $atts) )
$out[$name] = $atts[$name];
else
$out[$name] = $default;
}
/**
* Filters a shortcode's default attributes.
*
* If the third parameter of the shortcode_atts() function is present then this filter is available.
* The third parameter, $shortcode, is the name of the shortcode.
*
* @since 3.6.0
* @since 4.4.0 Added the `$shortcode` parameter.
*
* @param array $out The output array of shortcode attributes.
* @param array $pairs The supported attributes and their defaults.
* @param array $atts The user defined shortcode attributes.
* @param string $shortcode The shortcode name.
*/
if ( $shortcode ) {
$out = apply_filters( "shortcode_atts_{$shortcode}", $out, $pairs, $atts, $shortcode );
}
return $out;
}
?>
/*========================================================
* консольный виджет
========================================================*/
<?php
add_action( 'wp_dashboard_setup', 'prowp_add_dashboard_widget' );
// вызываем функцию для создания консольного виджета
// 1-слаг ID виджета
// 2-имя виджета
// 3-функция для отображения контента виджета
function prowp_add_dashboard_widget() {
wp_add_dashboard_widget( 'prowp_dashboard_widget',
'Pro WP Dashboard Widget', 'prowp_create_dashboard_widget' );
>
// функция для отображения содержания консольного виджета
function prowp_create_dashboard_widget() {
echo '<p>Hello World! This is my Dashboard Widget</p>';
}
?>
/*========================================================
* произвольные таблицы
========================================================*/
<?php
// Регистрирует функцию, которая будет срабатывать во время активации плагина.
// 1-Путь до PHP файла, в котором находится функция обратного вызова, указанная во втором параметре $callback
// 2-функция
register_activation_hook( __FILE__ , 'prowp_install' );
function prowp_install() {
global $wpdb;
// задаем имя произвольной таблицы
$table_name = $wpdb->prefix .'prowp_data';
// создаем запрос для создания новой таблицы
$sql = "CREATE TABLE " . $table_name ." (
id mediumint(9) NOT NULL AUTO_INCREMENT,
time bigint(ll) DEFAULT '0' NOT NULL,
name tinytext NOT NULL,
text text NOT NULL,
url VARCHAR(55) NOT NULL,
UNIQUE KEY id (id)
);";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
// выполняем запрос для создания таблицы
dbDelta( $sql );
// устанавливаем версию структуры таблицы
$prowp_db_version = '1.0';
// сохраняем номер версии структуры таблицы
add_option( 'prowp_db_version', $prowp_db_version );
}
$installed_ver = get_option( 'gmp_db_version' );
if( $installed_ver != $prowp_db_version ) {
// обновляем таблицу
// обновляем версию таблицы
update_option( 'gmp_db_version', $prowp_db_version );
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment