Ninja Forms Wordpress

Материал из rrv-wiki
Перейти к навигации Перейти к поиску


Мощный плагин для создания форм. Официальный сайт. Документация.

Здесь я буду описывать плагин для этого плагина.

Создаем в папке /wp-content/plugins/ папку Ninja Form MY в ней создаем файл index.php содержащий:

<?php
/**
 * Plugin Name: Ninja Form MY (Мои дополнения)
 */

// Дальше будем писать свой код.

Активируем плагин через меню плагинов.

Доступ до управления определенной группе пользователей

Для начала ставим плагин User Role Editor, можно конечно и без него, но с ним удобнее.

Настройка User Role Editor

Заходим в Пользователи => Редактор ролей пользователей

Нажимаем Добавить роль и создаем роль например с названием NinjaFormsUsers

Включаем следующие "Возможности ядра":

  • edit_posts
  • read

Все, это минимальные требуемые права, теперь создаем пользователя (пользователей) и назначаем им эту роль.

Теперь вставляем В наш плагин строчки с сайта разработчиков, что бы получилось следующее:

<?php
/**
 * Plugin Name: Ninja Form MY (Мои дополнения)
 */

//Даем права
// To give Editors access to the ALL Forms menu
function my_custom_change_ninja_forms_all_forms_capabilities_filter( $capabilities ) {
    $capabilities = "edit_pages";
    return $capabilities;
}
add_filter( 'ninja_forms_admin_parent_menu_capabilities', 'my_custom_change_ninja_forms_all_forms_capabilities_filter' );
add_filter( 'ninja_forms_admin_all_forms_capabilities', 'my_custom_change_ninja_forms_all_forms_capabilities_filter' );
// To give Editors access to ADD New Forms
function my_custom_change_ninja_forms_add_new_capabilities_filter( $capabilities ) {
    $capabilities = "edit_pages";
    return $capabilities;
}
add_filter( 'ninja_forms_admin_parent_menu_capabilities', 'my_custom_change_ninja_forms_add_new_capabilities_filter' );
add_filter( 'ninja_forms_admin_add_new_capabilities', 'my_custom_change_ninja_forms_add_new_capabilities_filter' ); 

/* To give Editors access to the Submissions - Simply replace ‘edit_posts’ in the code snippet below with the capability 
that you would like to attach the ability to view/edit submissions to.Please note that all three filters are needed to 
provide proper submission viewing/editing on the backend!
*/
function nf_subs_capabilities( $cap ) {
    return 'edit_posts';
}
add_filter( 'ninja_forms_admin_submissions_capabilities', 'nf_subs_capabilities' );
add_filter( 'ninja_forms_admin_parent_menu_capabilities', 'nf_subs_capabilities' );
add_filter( 'ninja_forms_admin_menu_capabilities', 'nf_subs_capabilities' );

// To give Editors access to the Inport/Export Options
function my_custom_change_ninja_forms_import_export_capabilities_filter( $capabilities ) {
    $capabilities = "edit_pages";
    return $capabilities;
}
add_filter( 'ninja_forms_admin_parent_menu_capabilities', 'my_custom_change_ninja_forms_import_export_capabilities_filter' );
add_filter( 'ninja_forms_admin_import_export_capabilities', 'my_custom_change_ninja_forms_import_export_capabilities_filter' );

// To give Editors access to the the Settings page
function my_custom_change_ninja_forms_settings_capabilities_filter( $capabilities ) {
    $capabilities = "edit_pages";
    return $capabilities;
}
add_filter( 'ninja_forms_admin_parent_menu_capabilities', 'my_custom_change_ninja_forms_settings_capabilities_filter' );
add_filter( 'ninja_forms_admin_settings_capabilities', 'my_custom_change_ninja_forms_settings_capabilities_filter' );

Если что то не нужно давать не администратору, то комментируем строки.

Все, теперь не только администратор может заниматься ответом на формы, но и почти бесправные операторы :)

Добавление даты модификации при экспорте Submissions

В экспорте Submissions не хватает даты модификации, добавим ее.

Не будем раздувать index.php нашего дочернего плагина и перепишем его, что бы оставить предыдущий функционал. Ninja Form MY/index.php:

<?php
/**
 * Plugin Name: Ninja Form MY (Мои дополнения)
 */

// Extension directory
define("NINJA_FORMS_MY_FIELD_DIR", WP_PLUGIN_DIR."/".basename( dirname( __FILE__ ) ) );
 
// Check if Ninja Forms plugin is activated
if( in_array( 'ninja-forms/ninja-forms.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ){
	// Load field file
	require_once( NINJA_FORMS_MY_FIELD_DIR . "/includes/ninja-form-my-access.php" ); //Из предыдущего примера
	require_once( NINJA_FORMS_MY_FIELD_DIR . "/classes/subs-my.php" ); //Новый класс NF_Subs, копируем из плагина и редактируем
	
	//Replacement NF_Subs class (меняем класс из темы на свой класс NF_Subs_My)
	function nf_init_my($instance){
		$instance->subs = new NF_Subs_My();
	}
	add_action( 'nf_init', 'nf_init_my', 10, 2);
}

Уменьшил права из предыдущего примера, оставил только нужное. Ninja Form MY/includes/ninja-form-my-access.php:

<?php
// To give Editors access to the ALL Forms menu
/* To give Editors access to the Submissions - Simply replace ‘edit_posts’ in the code snippet below with the capability 
that you would like to attach the ability to view/edit submissions to.Please note that all three filters are needed to 
provide proper submission viewing/editing on the backend!
*/
function nf_subs_capabilities( $cap ) {
    return 'edit_posts';
}
add_filter( 'ninja_forms_admin_submissions_capabilities', 'nf_subs_capabilities' );
add_filter( 'ninja_forms_admin_parent_menu_capabilities', 'nf_subs_capabilities' );
add_filter( 'ninja_forms_admin_menu_capabilities', 'nf_subs_capabilities' );

Переписывать весь файл не буду, но берем файл ninja-forms/classes/subs.php копируем в Ninja Form MY/classes/subs-spsl.php и после строк:

// Add our "Date" label.
$label_array[0]['_date_submitted'] = __( 'Date Submitted', 'ninja-forms' );

добавляем

// Add our "Date" label.
$label_array[0]['_date_modified'] = __( 'Date Modified', 'ninja-forms' );

После строк

} else if ( '_date_submitted' == $field_id ) {
// Get the date of our submission.
$date = strtotime( Ninja_Forms()->sub( $sub_id )->date_submitted );
// The first item is our date field.
$user_value = date( $date_format, $date );

добавляем

} else if ( '_date_modified' == $field_id ) {
// Get the date of our modified.
$date = strtotime( Ninja_Forms()->sub( $sub_id )->date_modified );
// The first item is our date field.
$user_value = date( $date_format, $date );


Oops! That addon is not yet compatible with Ninja Forms THREE

В третей версии плагина, "жадные" разработчики решили прикрыть возможность создания дочерних своему плагинов. Пришлось переименовать папку ninja-forms-my в ninja-form-my что бы пройти проверку на совместимость плагина (проверка тут ./lib/NF_AddonChecker.php) иначе выдавало: Oops! That addon is not yet compatible with Ninja Forms THREE. или Проблема! Этот дополнительный компонент еще не совместим с Ninja Forms 3