strokoff

Создание страницы плагина WordPress

При разработке плагинов и модулей для WordPress. На сайте приходится создавать в самой CMS дополнительные страницы на которых осуществляется вывод информации из самого плагина. Сегодня речь пойдет о том, как добавить новую страницу в wordpress через сам плагин.

В целом нам понадобятся два хука для активации и деактивации плагина. Именно в этот момент мы будем добавлять в WordPress свою страницу. Также добавим возможность обращения к нашей странице через parse_query

В главном файле плагина пишем.

[cce lang=’php’]
/* Запускаем функцию установки */
register_activation_hook(__FILE__,’my_plugin_install’);

/* Запускаем функцию деактивации*/
register_deactivation_hook( __FILE__, ‘my_plugin_remove’ );
Функция установки плагина:
function my_plugin_install() {

global $wpdb;

$the_page_title = ‘Заголовок страницы’;
$the_page_name = ‘Имя страницы’;

// Меняем название в меню
delete_option(«my_plugin_page_title»);
add_option(«my_plugin_page_title», $the_page_title, », ‘yes’);
// имя страницы (slug)
delete_option(«my_plugin_page_name»);
add_option(«my_plugin_page_name», $the_page_name, », ‘yes’);
// ID
delete_option(«my_plugin_page_id»);
add_option(«my_plugin_page_id», ‘0’, », ‘yes’);

$the_page = get_page_by_title( $the_page_title );

if ( ! $the_page ) {

// Создаем пост
$_p = array();
$_p[‘post_title’] = $the_page_title; //Заголовок страницы
$_p[‘post_content’] = «Можно вписать контент.»;
$_p[‘post_status’] = ‘publish’; //Статус публикации
$_p[‘post_type’] = ‘page’; //Тип поста post или page
$_p[‘comment_status’] = ‘closed’; //Статус комментариев
$_p[‘ping_status’] = ‘closed’; //Пинги для поста
$_p[‘post_category’] = array(1); // Категории поста, по умолчанию «Без категории»

// Добавляем пост в бд
$the_page_id = wp_insert_post( $_p );

}
else {
// Плагин мог быть активнее и страница могла быть перемещена в корзину

$the_page_id = $the_page->ID;

//Обновляем статус страницы
$the_page->post_status = ‘publish’;
$the_page_id = wp_update_post( $the_page );

}
//Обновляем ID
delete_option( ‘my_plugin_page_id’ );
add_option( ‘my_plugin_page_id’, $the_page_id );

}

//Функция удаления плагина
function my_plugin_remove() {

global $wpdb;

$the_page_title = get_option( «my_plugin_page_title» );
$the_page_name = get_option( «my_plugin_page_name» );

// Получаем ID поста
$the_page_id = get_option( ‘my_plugin_page_id’ );
if( $the_page_id ) {

wp_delete_post( $the_page_id ); // переносим в корзину (полностью не удаляем)

}
//Удаляем опции
delete_option(«my_plugin_page_title»);
delete_option(«my_plugin_page_name»);
delete_option(«my_plugin_page_id»);

}
[/cce]

Добавляем возможность обращения к странице через parse_query фильтр.
[cce lang=’php’]
function my_plugin_query_parser( $q ) {

$the_page_name = get_option( «my_plugin_page_name» );
$the_page_id = get_option( ‘my_plugin_page_id’ );

$qv = $q->query_vars;

//если НЕ используем permalinks…?
if( !$q->did_permalink AND ( isset( $q->query_vars[‘page_id’] ) ) AND ( intval($q->query_vars[‘page_id’]) == $the_page_id ) ) {

$q->set(‘my_plugin_page_is_called’, TRUE );
return $q;

}
elseif( isset( $q->query_vars[‘pagename’] ) AND ( ($q->query_vars[‘pagename’] == $the_page_name) OR ($_pos_found = strpos($q->query_vars[‘pagename’],$the_page_name.’/’) === 0) ) ) {

$q->set(‘my_plugin_page_is_called’, TRUE );
return $q;

}
else {

$q->set(‘my_plugin_page_is_called’, FALSE );
return $q;

}

}

//Добавляем фильтр
add_filter( ‘parse_query’, ‘my_plugin_query_parser’ );

[/cce]

На этом все. Буду рад ответить на ваши вопросы и замечания.

 


Последняя редакция 26 августа, 2013 в 03:08