• ДОБРО ПОЖАЛОВАТЬ В КЛУБ ПО WORDPRESS

    Мы активно растущий клуб по WordPress и нам нужна помощь каждого человека, в том числе и Ваша! Не стесняйтесь и станьте частью большого сообщества.
    Мы делимся новостями, отытом и полезными советами! Пройдите простую регистрацию, чтобы пользоваться всеми возможностями нашего клуба.

    Присоединяйтесь к нам, вам обязательно понравится - Присоединится

Создание плагина для админки ( консоли )

Di Ost

WP шаман
СВОЙ

Di Ost

WP шаман
СВОЙ
Сообщения
271
Доброго времени суток, обыскался на форуме, но помню, что была мануалка по плагинам. Задача такая

Есть сайт на Wordpress ( 4.7.4 ), на него установлен Visual Composer ( 5.1 ), для VC установлен аддон DHVC Form ( 1.3.19 ), этот аддон позволяет создавать формы обратной связи, и после отправки он добавляет информацию в таблицу wp_dhvc_form_entry_data ( которую плагин сам создал ),
Ashampoo_Snap_2017.04.28_01h07m42s_016_.png

так же в разделе плагина есть возможность посмотреть полученные сообщения в виде выпадающего списка:
Ashampoo_Snap_2017.04.28_01h52m30s_018_.png
И при нажатии на него, открывается само отправленное сообщение:
Ashampoo_Snap_2017.04.28_01h58m15s_019_.png

Теперь к задаче, в этой таблице есть столбец :
Ashampoo_Snap_2017.04.28_01h08m24s_017_.png

Где хранятся все данные в виде массива, перебрать массив по нужным мне параметрам не проблема, проблема такова:

Создать свой плагин, который:
Добавит в меню консоли администратора пункт "Список" и пустую страничку
В эту страничку я уже заложу выборку из БД + перебор массива. Проблема в том, что сколько бы не рыл мануалов, все мануалы по перехвату функций и работа с фронтэндом, с бэкэндом не нашел. На KAMA-WP делал по мануалке, скачивал заготовку но она топорная, генератор каркаса плагина - сайт отключен. Подскажите как можно реализовать этот вопрос? Или хотя бы где порыть информацию по созданию плагина для консоли администратора.

Заранее благодарен !

P.S. Пробовал расковырять плагин DHVC Form, нашел форму которая выводит, но знаний недостаточно, что бы вывести в отдельный пункт, да и думаю чем разбиратся с иным функционалом, проще написать свой, ведь нужно всего лишь создать раздел и там выборку \ перебор сделаю.
 

Wildcdu

ЭКСПЕРТ

Wildcdu

ЭКСПЕРТ
Сообщения
1,120
Доброго времени суток, обыскался на форуме, но помню, что была мануалка по плагинам. Задача такая

Есть сайт на Wordpress ( 4.7.4 ), на него установлен Visual Composer ( 5.1 ), для VC установлен аддон DHVC Form ( 1.3.19 ), этот аддон позволяет создавать формы обратной связи, и после отправки он добавляет информацию в таблицу wp_dhvc_form_entry_data ( которую плагин сам создал ),
Посмотреть вложение 2074
так же в разделе плагина есть возможность посмотреть полученные сообщения в виде выпадающего списка:
Посмотреть вложение 2072
И при нажатии на него, открывается само отправленное сообщение:
Посмотреть вложение 2073

Теперь к задаче, в этой таблице есть столбец :
Посмотреть вложение 2075
Где хранятся все данные в виде массива, перебрать массив по нужным мне параметрам не проблема, проблема такова:

Создать свой плагин, который:
Добавит в меню консоли администратора пункт "Список" и пустую страничку
В эту страничку я уже заложу выборку из БД + перебор массива. Проблема в том, что сколько бы не рыл мануалов, все мануалы по перехвату функций и работа с фронтэндом, с бэкэндом не нашел. На KAMA-WP делал по мануалке, скачивал заготовку но она топорная, генератор каркаса плагина - сайт отключен. Подскажите как можно реализовать этот вопрос? Или хотя бы где порыть информацию по созданию плагина для консоли администратора.

Заранее благодарен !

P.S. Пробовал расковырять плагин DHVC Form, нашел форму которая выводит, но знаний недостаточно, что бы вывести в отдельный пункт, да и думаю чем разбиратся с иным функционалом, проще написать свой, ведь нужно всего лишь создать раздел и там выборку \ перебор сделаю.
У нас было руководство. В выходные дам объяснения по созданию пункта меню и странички доп.
 

Wildcdu

ЭКСПЕРТ

Wildcdu

ЭКСПЕРТ
Сообщения
1,120
Кратенько
для начала пишем такой файлик и если надо помещаем в папку под каким то именем например пишем плагин пусть будет moi_wp это будет папка в нее поместим файл с таким же именем и расширением php будет так moi_wp.php
в него код этот
PHP:
<?php
/*
Plugin Name: Мой WP
Author: Ваше ФИО
Author URI: http:// если надо пишем адрес
*/

/*  Copyright 2017 ФИО (email: @@@@@@)

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

function opinions_install(){
    global $wpdb;
    $table_name = $wpdb->prefix . 'moi_wp';
   
    if($wpdb->get_var("SHOW TABLES LIKE $table_name") != $table_name){
        $sql = "CREATE TABLE IF NOT EXISTS `$table_name` (
                    `id_opt` int(11) NOT NULL AUTO_INCREMENT,
                    `name` varchar(40) NOT NULL,
                    `text` text NOT NULL,
                    PRIMARY KEY (`id_opt`)
                ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;";
        $wpdb->query($sql);
    }
   
    add_option('opt_on_page', 5);
}

function opt_uninstall(){
    delete_option('opt_on_page');
}

function opt_ondelete(){
    global $wpdb;
    $table_name = $wpdb->prefix . 'moi_wp';
    $sql = "DROP TABLE IF EXISTS $table_name";
    $wpdb->query($sql);
}

register_activation_hook(__FILE__, 'opt_install');
register_deactivation_hook(__FILE__, 'opt_uninstall');
register_uninstall_hook(__FILE__, 'opt_ondelete');

function opt_admin_menu(){
    add_posts_page('Мой-WP', 'Мой-WP', 8, 'opt', 'opt_editor');
}

add_action('admin_menu', 'opt_admin_menu');

function opt_editor(){
    switch($_GET['c']){
        case 'add':
            $action = 'add';
            break;
        case 'edit':
            $action = 'edit';
            break;
        default:
            $action = 'all';
            break;
    }
   
    include_once("includes/$action.php");
}

function opt_short(){
    ob_start();
    include_once("includes/intro.php");
    return ob_get_clean();
}

add_filter('widget_text', 'do_shortcode');
add_shortcode('opt', 'opt_short');
Дальше разберетесь? Если не понятно что то, подскажу по мере сил. Меню создается в записях. Если по другому нужно тогда в кодекс WP я по памяти не помню все ID для вставки меню в определенную позицию
 

Wildcdu

ЭКСПЕРТ

Wildcdu

ЭКСПЕРТ
Сообщения
1,120
забыл добавить плагин создает таблицу инсталится итд если не нужно просто убрать участки кода... там еще страницы пути можно добавить убрать ... смотрите внимательно
 

Di Ost

WP шаман
СВОЙ

Di Ost

WP шаман
СВОЙ
Сообщения
271
забыл добавить плагин создает таблицу инсталится итд если не нужно просто убрать участки кода... там еще страницы пути можно добавить убрать ... смотрите внимательно
Благодарю за информацию, примерно так и решил вопрос ( плюс, что мне ничего не надо добавлять просто вывод из таблицы ), но это была лишь вершина айсберга. Не думал не гадал, что столкнусь лицом к лицу с самым страшным моим врагом - JSON.

Трабла моей задумки, что информация нужной мне ячейки хранится в таком формате:
[SQL]a:6:{s:4:"area";s:0:"";s:4:"room";s:0:"";s:4:"text";s:174:"Тестовое сообщение с кавычками &quot; и одинарными тоже &#039; и еще кавычек &quot; &#039;&#039;&#039; &quot;&quot;&quot;";s:4:"name";s:10:"Данил";s:5:"email";s:11:"net@net.net";s:5:"phone";s:3:"888";}[/SQL]
Еще подумал, что странно выглядит информация, но протупил и подумал, что это массив в массиве со странными ключами. И тут начинается самое интересное, решил капнуть плагин DHVC Form и с ужасом обнаружил, что там все идет через json_decode . Порылся действительно это строка JSON. Изначально пробовал передавить через вышеупомянутую функцию ( json_decode ), однако пробелма, в том, что для этого нужна строка формата к примеру :
[SQL]"4":"area";[/SQL]
но в моем случае:
[SQL]s:4:"area";[/SQL]
Ковырял, ковырял, решил придумать костыльный велосипед ( знаю, что это порно, но как выше говорил JSON мой враг, а на войне все методы хороши ).

Для примера, прошелся по всем формам, получил результат - заполненую таблицу ( на скриншоте выделено желтым ) :
Ashampoo_Snap_2017.05.03_21h05m15s_006_.png
Проанализировал, что нужные мне данные помечены (s:10: , s:11: , s:3:), решил, что вопрос раскидать как два байта отослать. Написал код:
PHP:
    <?php
    global $wpdb;
    $subscribers_array = $wpdb->get_results('SELECT entry_data,submitted FROM '. $wpdb->prefix.'dhvc_form_entry_data ORDER BY id DESC ');?>
    <?php /* Перебор массивов с массивами*/
    foreach ( $subscribers_array as $subscriber_rov ) {?>
    <tr>
        <?php foreach ( $subscriber_rov as $key => $subscriber_cel ) {
            switch ($key) {
                case "entry_data":

                    $subscriber_cel_strat = substr("$subscriber_cel", 5); // Срезаем начало в виде a:4:{ и т.п.
                    $subscriber_cel_end = substr("$subscriber_cel_strat", 0, -1); // Срезаем в конце }
                    $subscriber_cel_arr = explode(";", $subscriber_cel_end); // Разбиваем строку на массив
                    foreach ( $subscriber_cel_arr as $subscriber_cel_arr_cel ) {
                        if(strpos($subscriber_cel_arr_cel, 's:10:') === 0){
                            $subscriber_cel_name = $subscriber_cel_arr_cel;
                            $subscriber_cel_name_strat = substr("$subscriber_cel_name", 6); // Срезаем начало в виде s:10:{ и т.п.
                            $subscriber_cel_name_end = substr("$subscriber_cel_name_strat", 0, -1); // Срезаем в конце }
                        }
                        if((strpos($subscriber_cel_arr_cel, 's:11:') === 0) OR (strpos($subscriber_cel_arr_cel, 's:17:') === 0)){
                            $subscriber_cel_email = $subscriber_cel_arr_cel;
                            $subscriber_cel_email_strat = substr("$subscriber_cel_email", 6); // Срезаем начало в виде s:10:{ и т.п.
                            $subscriber_cel_email_end = substr("$subscriber_cel_email_strat", 0, -1); // Срезаем в конце }
                        }
                        if(strpos($subscriber_cel_arr_cel, 's:3:') === 0){
                            $subscriber_cel_phone = $subscriber_cel_arr_cel;
                            $subscriber_cel_phone_strat = substr("$subscriber_cel_phone", 5); // Срезаем начало в виде s:10:{ и т.п.
                            $subscriber_cel_phone_end = substr("$subscriber_cel_phone_strat", 0, -1); // Срезаем в конце }
                        }
                    }
                    if(empty($subscriber_cel_name_end)){ $subscriber_cel_name_end = "-";}
                    if(empty($subscriber_cel_email_end)){ $subscriber_cel_email_end = "-";}
                    if(empty($subscriber_cel_phone_end)){ $subscriber_cel_phone_end = "-";}

                    echo "<td class='name'>$subscriber_cel_name_end</td><td class='email'>$subscriber_cel_email_end</td><td class='phone'>$subscriber_cel_phone_end</td>";
                    break;
                case "submitted":
                    echo "<td>$subscriber_cel</td>";
                    break;
            }
        }?>
</tr>
    <?php } ?>
Все заработало как надо:
Ashampoo_Snap_2017.05.png
Решил проверить, добавил новую запись - как оказалось это не постоянные значения, и они меняются, иногда даже одинаковые ( на 1 скрине отмечены красным ). Пока, что не знаю как решить этот вопрос, либо заморочится раскопать тот плагин и посмотреть механику как он работает, либо пока писал пост, обратил внимание на тенденцию, что перед нужной мне информацией есть ключ, например:
[SQL]s:4:"name";s:10:"Данил";
s:5:"email";s:11:"net@net.net";
s:5:"phone";s:11:"43543tfdgvd";[/SQL]
Я уже сделал, что оно формируется массивом ( функцией explode и значением ";" ), так вот думаю укомплектовать, массивы попарно:
[SQL]s:4:"name"; и s:10:"Данил";[/SQL]
[SQL]s:5:"email"; и s:11:"net@net.net";[/SQL]
[SQL]s:5:"phone"; и s:11:"43543tfdgvd";[/SQL]
После, посрезать ненужное:
[SQL]name и Данил[/SQL]
[SQL]email и net@net.net[/SQL]
[SQL]phone и 43543tfdgvd[/SQL]
И запилить массив со значением и ключом, как минимум, выводиться будет то, что мне нужно в нужном месте.

Вот такой масштаб трагедии, но это повод в дальнейшем ихучить JSON и AJAX давно собираюсь, но решил закрыть проект и уже курсы покачал :)
 

Di Ost

WP шаман
СВОЙ

Di Ost

WP шаман
СВОЙ
Сообщения
271
Сбор имени, почты, телефона в отдельный список на DHVC Form реализован + выгрузка этого всего в отдельный файл xlsx ( экселевский файл ). То, что получилось не публикую т.к. там есть костыли и стыдно за код, но если кто то столкнется с такой же проблемой пишите в личку расскажу как реализовать.
 

aleksbond

НОВИЧОК

aleksbond

НОВИЧОК
Сообщения
1
Приветствую! Установил плагин, нужно настроить для сбора данных на семинар.... не могу понять, не отправляет даже данные, нужна помощь, хоть какая-то.
 
Сверху