Создание страницы плагина WordPress
При разработке плагинов и модулей для WordPress. На сайте приходится создавать в самой CMS дополнительные страницы на которых осуществляется вывод информации из самого плагина. Сегодня речь пойдет о том, как добавить новую страницу в wordpress через сам плагин.
В целом нам понадобятся два хука для активации и деактивации плагина. Именно в этот момент мы будем добавлять в WordPress свою страницу. Также добавим возможность обращения к нашей странице через parse_query
В главном файле плагина пишем.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | /* Запускаем функцию установки */ 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"); } |
Добавляем возможность обращения к странице через parse_query фильтр.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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' ); |
На этом все. Буду рад ответить на ваши вопросы и замечания.
Комментарии