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

05 Июня 2013 1460 , , ,

При разработке плагинов и модулей для 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' );

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

 

Подписывайтесь на обновления

Читайте RSS ленту

Комментарии

Добавить комментарий