$template ) {
if( ! wpfkey( $this->_slugs, $template_key ) ) $this->_slugs[ $template_key ] = ( wpfval( $template, 'slug' ) ?: $template_key );
}
}
public function __construct() {
$this->init__SERVER();
$this->init_defaults();
$this->init_base();
add_action( 'wpforo_after_init_base_templates', function( $base_templates ) {
$this->templates_to__slugs( $base_templates );
$this->slugs = wpforo_get_option( 'wpforo_base_slugs', array_merge( $this->_slugs, $this->slugs ) );
$this->slugs = array_map( 'wpforo_fix_url', $this->slugs );
} );
add_action( 'wpforo_after_init_member_templates', function( $member_templates ) {
$this->templates_to__slugs( $member_templates );
$this->slugs = wpforo_get_option( 'slugs', array_merge( $this->_slugs, $this->slugs ) );
$this->slugs = array_map( 'wpforo_fix_url', $this->slugs );
} );
add_action( 'wpforo_after_init_templates', function( $templates ) {
$this->templates_to__slugs( $templates );
$this->slugs = wpforo_get_option( 'slugs', array_merge( $this->_slugs, $this->slugs ) );
$this->slugs = array_map( 'wpforo_fix_url', $this->slugs );
} );
add_action( 'wpforo_after_change_board', function() { $this->init(); } );
}
private function init__SERVER() {
$umf = (int) wpforo_human_size_to_bytes( ini_get( 'upload_max_filesize' ) );
$pms = (int) wpforo_human_size_to_bytes( ini_get( 'post_max_size' ) );
$maxs_min = max( 1, min( $umf, $pms ) );
$this->_SERVER = [
'upload_max_filesize' => $umf,
'post_max_size' => $pms,
'maxs_min' => $maxs_min,
'upload_max_filesize_human' => wpforo_print_size( $umf ),
'post_max_size_human' => wpforo_print_size( $pms ),
'maxs_min_human' => wpforo_print_size( $maxs_min ),
];
}
public function init_info() {
$this->info = new stdClass();
$this->init_core();
$this->init_addons();
}
private function init_core() {
$this->info->core = [
"general" => [
"title" => esc_html__( "General Settings", "wpforo" ),
"title_original" => "General Settings",
"icon" => '',
"description" => esc_html__(
"Here you can manage admin bar displaying options, using WordPress date format in forum and permalinks of general pages. If you have hmore then one forum board, this settings are still are general for all forum boards.",
"wpforo"
),
"description_original" => "Here you can manage admin bar displaying options, using WordPress date format in forum and permalinks of general pages. If you have hmore then one forum board, this settings are still are general for all forum boards.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/general-settings/",
"status" => "ok",
"base" => true,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/general.php' );
},
"options" => [
"admin_bar" => [
"type" => "checkbox",
"label" => esc_html__( "Show Admin Bar for Usergroups", "wpforo" ),
"label_original" => "Show Admin Bar for Usergroups",
"description" => esc_html__(
"This option displays the top black bar for accessing to the dashboard. Make sure the regular members can only access to their own profile editing page before enabling this option.",
"wpforo"
),
"description_original" => "This option displays the top black bar for accessing to the dashboard. Make sure the regular members can only access to their own profile editing page before enabling this option.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/general-settings/#show-admin-bar-for-usergroups",
"variants" => $this->get_variants_usergroups( 4 ),
],
"wp_date_format" => [
"type" => "radio",
"label" => esc_html__( "Enable WordPress Date/Time Format", "wpforo" ),
"label_original" => "Enable WordPress Date/Time Format",
"description" => esc_html__( "You can manage WordPress date and time format in WordPress Settings > General admin page.", "wpforo" ),
"description_original" => "You can manage WordPress date and time format in WordPress Settings > General admin page.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/general-settings/#enable-wordpress-date-time-format",
],
"fontawesome" => [
"type" => "radio",
"label" => esc_html__( "Enable wpForo Font-Awesome Lib", "wpforo" ),
"label_original" => "Enable wpForo Font-Awesome Lib",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 'sitewide', 'label' => 'Sitewide' ],
[ 'value' => 'forum', 'label' => 'Forum' ],
[ 'value' => 'off', 'label' => 'Off' ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/colors-styles/#enable-wpforo-font-awesome-lib",
],
"debug_mode" => [
"type" => "radio",
"label" => esc_html__( "Enable Debug Mode", "wpforo" ),
"label_original" => "Enable Debug Mode",
"description" => esc_html__(
"If you got some issue with wpForo, please enable this option before asking for support, this outputs hidden important information to help us debug your issue.",
"wpforo"
),
"description_original" => "If you got some issue with wpForo, please enable this option before asking for support, this outputs hidden important information to help us debug your issue.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/general-settings/#enable-debug-mode",
],
],
],
"board" => [
"title" => esc_html__( "Board Settings", "wpforo" ),
"title_original" => "Board Settings",
"icon" => '',
"description" => esc_html__(
"This is a board specific general setting page. Boards are separate forums in separate pages. By default, there is a one forum board and one setting menu. If you create a second forum board, you'll have a separate set of menus per board. You can create a new board if you want to have more than one forum in your website. For example, you can use boards to create separate forums for different languages \"EN Forum\" and \"FR Forum\". Here, you can enable forum cache and manage some board specific permalinks.",
"wpforo"
),
"description_original" => "This is a board specific general setting page. Boards are separate forums in separate pages. By default, there is a one forum board and one setting menu. If you create a second forum board, you'll have a separate set of menus per board. You can create a new board if you want to have more than one forum in your website. For example, you can use boards to create separate forums for different languages \"EN Forum\" and \"FR Forum\". Here, you can enable forum cache and manage some board specific permalinks.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/board-settings/",
"status" => "ok",
"base" => false,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/board.php' );
},
"options" => [
"under_construction" => [
"type" => "radio",
"label" => esc_html__( "Under Construction", "wpforo" ),
"label_original" => "Under Construction",
"description" => esc_html__( "You can enable option Under Construction for each boards separately. (This option has no effect for site admins.)", "wpforo" ),
"description_original" => "You can enable option Under Construction for each boards separately. (This option has no effect for site admins.)",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/board-settings/#under-construction",
],
"cache" => [
"type" => "radio",
"label" => esc_html__( "Enable Cache", "wpforo" ),
"label_original" => "Enable Cache",
"description" => esc_html__( "wpForo has own cache system, enable this to reduce sql requests and make your forum run faster.", "wpforo" ),
"description_original" => "wpForo has own cache system, enable this to reduce sql requests and make your forum run faster.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/board-settings/#enable-cache",
],
"url_structure" => [
"type" => "radio",
"label" => esc_html__( "URL Structure", "wpforo" ),
"label_original" => "URL Structure",
"description" => esc_html__(
"This option allows managing topic and post URL structure. By default, URLs are built based on topic titles. You can change them to ID and make them shorter.",
"wpforo"
),
"description_original" => "This option allows managing topic and post URL structure. By default, URLs are built based on topic titles. You can change them to ID and make them shorter.",
"variants" => [
[ 'value' => 'short', 'label' => __( 'ID', 'wpforo' ), 'title' => 'https://example.com/postid/123/' ],
[ 'value' => 'full', 'label' => __( 'Title', 'wpforo' ), 'title' => 'https://example.com/community/sample-forum/sample-topic/' ],
],
"docurl" => "",
],
],
],
'components' => [
"title" => esc_html__( "Display Components", "wpforo" ),
"title_original" => "Display Components",
"icon" => '',
"description" => esc_html__(
"wpForo is a forum plugin which is loaded in one WordPress page, so the whole forum with its categories, forums, topics, members and profile pages are loaded dynamically in one WordPress page. Almost all components you can see in the page content area (forum area) can be displayed or hidden in wpForo settings, especially here, in the Display Components admin page.",
"wpforo"
),
"description_original" => "wpForo is a forum plugin which is loaded in one WordPress page, so the whole forum with its categories, forums, topics, members and profile pages are loaded dynamically in one WordPress page. Almost all components you can see in the page content area (forum area) can be displayed or hidden in wpForo settings, especially here, in the Display Components admin page.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-components/",
"status" => "ok",
"base" => false,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/components.php' );
},
"options" => [
"admin_cp" => [
"type" => "radio",
"label" => esc_html__( "Frontend Admin Control Panel", "wpforo" ),
"label_original" => "Frontend Admin Control Panel",
"description" => esc_html__(
"This is a section with some important buttons for quick actions and accesses to certain admin pages. it's located in the forum home page under the forum list. This section is only available for website administrators.",
"wpforo"
),
"description_original" => "This is a section with some important buttons for quick actions and accesses to certain admin pages. it's located in the forum home page under the forum list. This section is only available for website administrators.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-components/#frontend-admin-control-panel",
],
"page_title" => [
"type" => "radio",
"label" => esc_html__( "Show Forum Page Title", "wpforo" ),
"label_original" => "Show Forum Page Title",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-components/#show-forum-page-title",
],
"top_bar" => [
"type" => "radio",
"label" => esc_html__( "Show Forum Menu Bar", "wpforo" ),
"label_original" => "Show Forum Menu Bar",
"description" => esc_html__( "This menu bar contains the forum menu, notification bell and forum search section.", "wpforo" ),
"description_original" => "This menu bar contains the forum menu, notification bell and forum search section.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-components/#forum-menu-search-section-and-breadcrumb",
],
"top_bar_search" => [
"type" => "radio",
"label" => esc_html__( "Show Search Section in the Forum Menu Bar", "wpforo" ),
"label_original" => "Show Search Section in the Forum Menu Bar",
"description" => esc_html__( "The search icon in the forum menu will be hidden on the home page if the "Open [AI Assistant] widget by Default on Home Page" option is enabled in AI Features setting page.", "wpforo" ),
"description_original" => "The search icon in the forum menu will be hidden on the home page if the "Open [AI Assistant] widget by Default on Home Page" option is enabled in AI Features setting page.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-components/#forum-menu-search-section-and-breadcrumb",
],
"sidebar_location" => [
"type" => "radio",
"label" => esc_html__( "wpForo Sidebar Location", "wpforo" ),
"label_original" => "wpForo Sidebar Location",
"description" => esc_html__( "This option allows you to manage the sidebar location in wpForo.", "wpforo" ),
"description_original" => "This option allows you to manage the sidebar location in wpForo.",
"variants" => [
[ 'value' => 'left', 'label' => __( 'Left', 'wpforo' ), 'title' => 'Always sets the sidebar location to the left, even for Right-to-Left (RTL) layouts.' ],
[
'value' => 'default',
'label' => __( 'Default', 'wpforo' ),
'title' => 'For Left-to-Right (LTR) displays the right position, and for Right-to-Left (RTL) displays the left position',
],
[ 'value' => 'right', 'label' => __( 'Right', 'wpforo' ), 'title' => 'Always sets the sidebar location to the right, even for Right-to-Left (RTL) layouts.' ],
],
"docurl" => "",
],
"breadcrumb" => [
"type" => "radio",
"label" => esc_html__( "Show Breadcrumb", "wpforo" ),
"label_original" => "Show Breadcrumb",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-components/#forum-menu-search-section-and-breadcrumb",
],
"footer" => [
"type" => "radio",
"label" => esc_html__( "Show Forum Footer", "wpforo" ),
"label_original" => "Show Forum Footer",
"description" => esc_html__(
"Forum footer is located at the bottom of all forum content. It includes forum statistic, last registered user and post information. As well as it contains the 'Mark all read' button and forums/topics icon description.",
"wpforo"
),
"description_original" => "Forum footer is located at the bottom of all forum content. It includes forum statistic, last registered user and post information. As well as it contains the 'Mark all read' button and forums/topics icon description.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-components/#forum-footer-and-statistics",
],
"footer_stat" => [
"type" => "radio",
"label" => esc_html__( "Show Forum Statistic", "wpforo" ),
"label_original" => "Show Forum Statistic",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-components/#forum-footer-and-statistics",
],
"copyright" => [
"type" => "radio",
"label" => esc_html__( "Help wpForo to grow, show plugin info", "wpforo" ),
"label_original" => "Help wpForo to grow, show plugin info",
"description" => esc_html__(
"Please enable this option to help wpForo get more popularity as your thank to the hard work we do for you totally free. This option adds a very small icon in forum footer, which will allow your site visitors recognize the name of forum solution you use.",
"wpforo"
),
"description_original" => "Please enable this option to help wpForo get more popularity as your thank to the hard work we do for you totally free. This option adds a very small icon in forum footer, which will allow your site visitors recognize the name of forum solution you use.",
"docurl" => "",
],
],
],
'forums' => [
"title" => esc_html__( "Display Forums", "wpforo" ),
"title_original" => "Display Forums",
"option" => 'wpforo_forum_options',
"icon" => '',
"description" => esc_html__(
"Here you can manage forum specific components which are displayed on the frontend. All options are grouped by forum layouts. You can find all necessary options to manage forum layout specific features. Each forum layout has its own specific features.",
"wpforo"
),
"description_original" => "Here you can manage forum specific components which are displayed on the frontend. All options are grouped by forum layouts. You can find all necessary options to manage forum layout specific features. Each forum layout has its own specific features.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/",
"status" => "ok",
"base" => false,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/forums.php' );
},
"options" => [
"layout_extended_intro_topics_toggle" => [
"type" => "radio",
"label" => esc_html__( "Extended Layout - Recent topics", "wpforo" ),
"label_original" => "Extended Layout - Recent topics",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => false, 'label' => __( 'Collapsed', 'wpforo' ) ],
[ 'value' => true, 'label' => __( 'Expanded', 'wpforo' ) ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/#extended-forum-layout",
],
"layout_extended_intro_topics_count" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Extended Layout - Number of Recent topics", "wpforo" ),
"label_original" => "Extended Layout - Number of Recent topics",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/#extended-forum-layout",
],
"layout_extended_intro_topics_length" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Extended Layout - Recent topic length", "wpforo" ),
"label_original" => "Extended Layout - Recent topic length",
"description" => esc_html__( "Set this option value 0 if you want to show the whole title in recent topic area.", "wpforo" ),
"description_original" => "Set this option value 0 if you want to show the whole title in recent topic area.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/#extended-forum-layout",
],
"layout_simplified_add_topic_button" => [
"type" => "radio",
"label" => esc_html__( "Simplified Layout - Display Add Topic Button on Forum List", "wpforo" ),
"label_original" => "Simplified Layout - Display Add Topic Button on Forum List",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/#simplified-forum-layout",
],
"layout_qa_intro_topics_toggle" => [
"type" => "radio",
"label" => esc_html__( "Q&A Layout - Recent topics", "wpforo" ),
"label_original" => "Q&A Layout - Recent topics",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => false, 'label' => __( 'Collapsed', 'wpforo' ) ],
[ 'value' => true, 'label' => __( 'Expanded', 'wpforo' ) ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/#q-a-forum-layout",
],
"layout_qa_intro_topics_count" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Q&A Layout - Number of Recent topics", "wpforo" ),
"label_original" => "Q&A Layout - Number of Recent topics",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/#q-a-forum-layout",
],
"layout_qa_intro_topics_length" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Q&A Layout - Recent topic length", "wpforo" ),
"label_original" => "Q&A Layout - Recent topic length",
"description" => esc_html__( "Set this option value 0 if you want to show the whole title in recent topic area.", "wpforo" ),
"description_original" => "Set this option value 0 if you want to show the whole title in recent topic area.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/#q-a-forum-layout",
],
"layout_qa_add_topic_button" => [
"type" => "radio",
"label" => esc_html__( "Q&A Layout - Display Add Topic Button on Forum List", "wpforo" ),
"label_original" => "Q&A Layout - Display Add Topic Button on Forum List",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/#q-a-forum-layout",
],
"layout_threaded_intro_topics_toggle" => [
"type" => "radio",
"label" => esc_html__( "Threaded Layout - Forums List", "wpforo" ),
"label_original" => "Threaded Layout - Forums List",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => false, 'label' => __( 'Collapsed', 'wpforo' ) ],
[ 'value' => true, 'label' => __( 'Expanded', 'wpforo' ) ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/#threaded-forum-layout",
],
"layout_threaded_display_subforums" => [
"type" => "radio",
"label" => esc_html__( "Threaded Layout - Display Sub Forums with Parent Forums", "wpforo" ),
"label_original" => "Threaded Layout - Display Sub Forums with Parent Forums",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/#threaded-forum-layout",
],
"layout_threaded_filter_buttons" => [
"type" => "radio",
"label" => esc_html__( "Threaded Layout - Display Thread Filtering Buttons", "wpforo" ),
"label_original" => "Threaded Layout - Display Thread Filtering Buttons",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"layout_threaded_add_topic_button" => [
"type" => "radio",
"label" => esc_html__( "Threaded Layout - Display Add Topic Button on Forum List", "wpforo" ),
"label_original" => "Threaded Layout - Display Add Topic Button on Forum List",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/#threaded-forum-layout",
],
"layout_threaded_intro_topics_count" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Threaded Layout - Number of Recent topics", "wpforo" ),
"label_original" => "Threaded Layout - Number of Recent topics",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/#threaded-forum-layout",
],
"layout_threaded_intro_topics_length" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Threaded Layout - Recent topic length", "wpforo" ),
"label_original" => "Threaded Layout - Recent topic length",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-forums/#threaded-forum-layout",
],
],
],
'styles' => [
"title" => esc_html__( "Colors & Styles", "wpforo" ),
"title_original" => "Colors & Styles",
"icon" => '',
"description" => esc_html__(
"Here you can change your forum style. There are six predefined styles (default, red, green, orange, gray and dark), these are set of different colors. You can change them and create your own set of colors. If you need more customization, you can add custom CSS code in the corresponding textarea. Also, you can change font size of forums, topics and post content.",
"wpforo"
),
"description_original" => "Here you can change your forum style. There are six predefined styles (default, red, green, orange, gray and dark), these are set of different colors. You can change them and create your own set of colors. If you need more customization, you can add custom CSS code in the corresponding textarea. Also, you can change font size of forums, topics and post content.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/colors-styles/",
"status" => "ok",
"base" => false,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/styles.php' );
},
"options" => [
"font_sizes" => [
"type" => "wrap",
"label" => esc_html__( 'Font Sizes', 'wpforo' ),
"label_original" => "Font Sizes:",
"description" => __( 'These options allow you to change the font sizes of forum and topic titles as well as the font size of post content.', 'wpforo' ),
"description_original" => 'These options allow you to change the font sizes of forum and topic titles as well as the font size of post content.',
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/colors-styles/#font-sizes",
"options_keys" => [ 'font_size_forum', 'font_size_topic', 'font_size_post_content' ],
],
"font_size_forum" => [
"type" => "select",
"label" => esc_html__( "Forums font size:", "wpforo" ),
"label_original" => "Forums font size:",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 11, 'label' => '11px' ],
[ 'value' => 12, 'label' => '12px' ],
[ 'value' => 13, 'label' => '13px' ],
[ 'value' => 14, 'label' => '14px' ],
[ 'value' => 15, 'label' => '15px' ],
[ 'value' => 16, 'label' => '16px' ],
[ 'value' => 17, 'label' => '17px' ],
[ 'value' => 18, 'label' => '18px' ],
[ 'value' => 19, 'label' => '19px' ],
[ 'value' => 20, 'label' => '20px' ],
[ 'value' => 21, 'label' => '21px' ],
[ 'value' => 22, 'label' => '22px' ],
[ 'value' => 23, 'label' => '23px' ],
[ 'value' => 24, 'label' => '24px' ],
[ 'value' => 25, 'label' => '25px' ],
[ 'value' => 26, 'label' => '26px' ],
[ 'value' => 27, 'label' => '27px' ],
],
],
"font_size_topic" => [
"type" => "select",
"label" => esc_html__( "Topics font size:", "wpforo" ),
"label_original" => "Topics font size:",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 11, 'label' => '11px' ],
[ 'value' => 12, 'label' => '12px' ],
[ 'value' => 13, 'label' => '13px' ],
[ 'value' => 14, 'label' => '14px' ],
[ 'value' => 15, 'label' => '15px' ],
[ 'value' => 16, 'label' => '16px' ],
[ 'value' => 17, 'label' => '17px' ],
[ 'value' => 18, 'label' => '18px' ],
[ 'value' => 19, 'label' => '19px' ],
[ 'value' => 20, 'label' => '20px' ],
[ 'value' => 21, 'label' => '21px' ],
[ 'value' => 22, 'label' => '22px' ],
[ 'value' => 23, 'label' => '23px' ],
[ 'value' => 24, 'label' => '24px' ],
[ 'value' => 25, 'label' => '25px' ],
[ 'value' => 26, 'label' => '26px' ],
[ 'value' => 27, 'label' => '27px' ],
],
],
"font_size_post_content" => [
"type" => "select",
"label" => esc_html__( "Post content font size:", "wpforo" ),
"label_original" => "Post content font size:",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 11, 'label' => '11px' ],
[ 'value' => 12, 'label' => '12px' ],
[ 'value' => 13, 'label' => '13px' ],
[ 'value' => 14, 'label' => '14px' ],
[ 'value' => 15, 'label' => '15px' ],
[ 'value' => 16, 'label' => '16px' ],
[ 'value' => 17, 'label' => '17px' ],
[ 'value' => 18, 'label' => '18px' ],
[ 'value' => 19, 'label' => '19px' ],
[ 'value' => 20, 'label' => '20px' ],
[ 'value' => 21, 'label' => '21px' ],
[ 'value' => 22, 'label' => '22px' ],
[ 'value' => 23, 'label' => '23px' ],
[ 'value' => 24, 'label' => '24px' ],
[ 'value' => 25, 'label' => '25px' ],
[ 'value' => 26, 'label' => '26px' ],
[ 'value' => 27, 'label' => '27px' ],
],
],
"custom_css" => [
"type" => "textarea",
"label" => esc_html__( "Custom CSS Code", "wpforo" ),
"label_original" => "Custom CSS Code",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/colors-styles/#custom-css-code",
],
"style" => [
"type" => "color",
"label" => esc_html__( "Forum Color Styles", "wpforo" ),
"label_original" => "Forum Color Styles",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/colors-styles/#forum-styles",
],
],
],
'topics' => [
"title" => esc_html__( "Display Topics & Posts", "wpforo" ),
"title_original" => "Display Topics & Posts",
"icon" => '',
"description" => esc_html__(
"This is the right place to manage topics and posts displaying options. Here you can manage the number of topics and posts per page, also you can display or hide recent posts under each topic in certain forum layouts. Some options are grouped by forum layouts.",
"wpforo"
),
"description_original" => "This is the right place to manage topics and posts displaying options. Here you can manage the number of topics and posts per page, also you can display or hide recent posts under each topic in certain forum layouts. Some options are grouped by forum layouts.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/",
"status" => "ok",
"base" => false,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/topics.php' );
},
"options" => [
"layout_extended_intro_posts_toggle" => [
"type" => "radio",
"label" => esc_html__( "Extended Layout - Recent posts", "wpforo" ),
"label_original" => "Extended Layout - Recent posts",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => false, 'label' => __( 'Collapsed', 'wpforo' ) ],
[ 'value' => true, 'label' => __( 'Expanded', 'wpforo' ) ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#extended-forum-layout",
],
"layout_extended_intro_posts_count" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Extended Layout - Number of Recent posts", "wpforo" ),
"label_original" => "Extended Layout - Number of Recent posts",
"description" => esc_html__( "Set this option value 0 if you want to show all posts in recent posts area.", "wpforo" ),
"description_original" => "Set this option value 0 if you want to show all posts in recent posts area.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#extended-forum-layout",
],
"layout_extended_intro_posts_length" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Extended Layout - Recent post length", "wpforo" ),
"label_original" => "Extended Layout - Recent post length",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#extended-forum-layout",
],
"layout_qa_posts_per_page" => [
"type" => "number",
"min" => 5,
"label" => esc_html__( "Q&A Layout - Number of Answers per Page", "wpforo" ),
"label_original" => "Q&A Layout - Number of Answers per Page",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#q-a-forum-layout",
],
"layout_qa_comments_limit_count" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Q&A Layout - Number of Comments per Answer", "wpforo" ),
"label_original" => "Q&A Layout - Number of Comments per Answer",
"description" => esc_html__(
"This is the number of comments under the answers before clicking the [load more comments] button. Set this option value 0 if you want to show all comments.",
"wpforo"
),
"description_original" => "This is the number of comments under the answers before clicking the [load more comments] button. Set this option value 0 if you want to show all comments",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#q-a-forum-layout",
],
"layout_qa_first_post_reply" => [
"type" => "radio",
"label" => esc_html__( "Q&A Layout - Enable Comments on the First Post (question)", "wpforo" ),
"label_original" => "Q&A Layout - Enable Comments on the First Post (question)",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#q-a-forum-layout",
],
"layout_threaded_posts_per_page" => [
"type" => "number",
"min" => 5,
"label" => esc_html__( "Threaded Layout - Number of Parent Posts per Page", "wpforo" ),
"label_original" => "Threaded Layout - Number of Parent Posts per Page",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#threaded-forum-layout",
],
"layout_threaded_nesting_level" => [
"type" => "number",
"min" => 0,
"max" => 7,
"label" => esc_html__( "Threaded Layout - Replies Nesting Levels Deep", "wpforo" ),
"label_original" => "Threaded Layout - Replies Nesting Levels Deep",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#threaded-forum-layout",
],
"layout_threaded_first_post_reply" => [
"type" => "radio",
"label" => esc_html__( "Threaded Layout - First Post Reply Button", "wpforo" ),
"label_original" => "Threaded Layout - First Post Reply Button",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#threaded-forum-layout",
],
"include_subforums_topics" => [
"type" => "radio",
"label" => esc_html__( "Display Subforums' Topics with the Parent Forum Topics", "wpforo" ),
"label_original" => "Display Subforums' Topics with the Parent Forum Topics",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"topics_per_page" => [
"type" => "number",
"min" => 5,
"label" => esc_html__( "Number of Topics per Page", "wpforo" ),
"label_original" => "Number of Topics per Page",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#number-of-topics-and-posts-per-page",
],
"posts_per_page" => [
"type" => "number",
"min" => 5,
"label" => esc_html__( "Number of Posts per Page", "wpforo" ),
"label_original" => "Number of Posts per Page",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#number-of-topics-and-posts-per-page",
],
"search_max_results" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Maximum Number of Search Results", "wpforo" ),
"label_original" => "Maximum number of search results",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#maximum-number-of-search-results",
],
"union_first_post" => [
"type" => "radio",
"label" => esc_html__( "Stick Topic's First Post on Top for Certain Forum Layout", "wpforo" ),
"label_original" => "Stick Topic's First Post on Top for Certain Forum Layout",
"description" => esc_html__(
"This option keeps the first topic post on top when you navigate through pages of that topic. You can manage this option by forum layouts.",
"wpforo"
),
"description_original" => "This option keeps the first topic post on top when you navigate through pages of that topic. You can manage this option by forum layouts.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#maximum-number-of-search-results",
],
"recent_posts_type" => [
"type" => "radio",
"label" => esc_html__( "Recent Posts Display Type", "wpforo" ),
"label_original" => "Recent Posts Display Type",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 'topics', 'label' => 'Topics' ],
[ 'value' => 'posts', 'label' => 'Posts' ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-topics-posts/#recent-posts-display-type",
],
"topic_head" => [
"type" => "radio",
"label" => esc_html__( "Display Topic Statistics and Overview Panel", "wpforo" ),
"label_original" => "Display Topic Statistics and Overview Panel",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"topic_head_expanded" => [
"type" => "radio",
"label" => esc_html__( "Keep Expanded Topic Overview in the Statistic Panel", "wpforo" ),
"label_original" => "Keep Expanded Topic Overview in the Statistic Panel",
"description" => "",
"description_original" => "",
"docurl" => "",
],
],
],
'tags' => [
"title" => esc_html__( "Topic Tags", "wpforo" ),
"title_original" => "Topic Tags",
"icon" => '',
"description" => esc_html__(
"Tags are a free form method of categorization, currently being used to group and categorize similar topics. The goal of using these tags in the forum is to create a \"heat map\", an index of topics covered within the Forum. The larger the size of the tag, the more discussions about the topic.",
"wpforo"
),
"description_original" => "Tags are a free form method of categorization, currently being used to group and categorize similar topics. The goal of using these tags in the forum is to create a \"heat map\", an index of topics covered within the Forum. The larger the size of the tag, the more discussions about the topic.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/topic-tags/",
"status" => "ok",
"base" => false,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/tags.php' );
},
"options" => [
"max_per_topic" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Maximum Number of Tags per Topic", "wpforo" ),
"label_original" => "Maximum Number of Tags per Topic",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/topic-tags/#maximum-number-of-tags-per-topic",
],
"per_page" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Number of Tags per Page", "wpforo" ),
"label_original" => "Number of Tags per Page",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/topic-tags/#number-of-tags-per-page",
],
"length" => [
"type" => "number",
"min" => 1,
"max" => 50,
"label" => esc_html__( "Maximum Tag Length", "wpforo" ),
"label_original" => "Maximum Tag Length",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/topic-tags/#maximum-tags-length",
],
"suggest_limit" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Maximum Number of Suggested Tags", "wpforo" ),
"label_original" => "Maximum Number of Suggested Tags",
"description" => esc_html__( "Tags are suggested while you type in the tag field. Using this option you can limit the maximum number of suggested tags.", "wpforo" ),
"description_original" => "Tags are suggested while you type in the tag field. Using this option you can limit the maximum number of suggested tags.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/topic-tags/#maximum-number-of-suggested-tags",
],
"lowercase" => [
"type" => "radio",
"label" => esc_html__( "Force Lowercase Tags", "wpforo" ),
"label_original" => "Force Lowercase Tags",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/topic-tags/#force-lowercase-tags",
],
],
],
'posting' => [
"title" => esc_html__( "Posting & Editor Settings", "wpforo" ),
"title_original" => "Posting & Editor Settings",
"icon" => '',
"description" => esc_html__(
"Here, you can find all settings related to topic and post creation including rich editor settings, text limitations, attachments control, option to enable WordPress plugin shortcodes in wpForo posts, post drafting and preview options. Some settings are grouped by forum layouts and some of them are general for all forum layouts.",
"wpforo"
),
"description_original" => "Here, you can find all settings related to topic and post creation including rich editor settings, text limitations, attachments control, option to enable WordPress plugin shortcodes in wpForo posts, post drafting and preview options. Some settings are grouped by forum layouts and some of them are general for all forum layouts.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/posting-editor-settings/",
"status" => "ok",
"base" => false,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/posting.php' );
},
"options" => [
"qa_display_answer_editor" => [
"type" => "radio",
"label" => esc_html__( "Q&A Layout - Display Answer Editor", "wpforo" ),
"label_original" => "Q&A Layout - Display Answer Editor",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/posting-editor-settings/#q-a-layout-%E2%80%93-display-answer-editor",
],
"qa_comments_rich_editor" => [
"type" => "radio",
"label" => esc_html__( "Q&A Layout - Comment Form Type", "wpforo" ),
"label_original" => "Q&A Layout - Comment Form Type",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => false, 'label' => __( 'Text Editor', 'wpforo' ) ],
[ 'value' => true, 'label' => __( 'Visual Editor', 'wpforo' ) ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/posting-editor-settings/#q-a-layout-%E2%80%93-comment-form-type",
],
"threaded_reply_rich_editor" => [
"type" => "radio",
"label" => esc_html__( "Threaded Layout - Reply Form Type", "wpforo" ),
"label_original" => "Threaded Layout - Reply Form Type",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => false, 'label' => __( 'Text Editor', 'wpforo' ) ],
[ 'value' => true, 'label' => __( 'Visual Editor', 'wpforo' ) ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/posting-editor-settings/#threaded-layout-%E2%80%93-reply-form-type",
],
"topic_title_min_length" => [
"type" => "number",
"min" => 1,
"label" => esc_html__( "Topic Title Minimum Length", "wpforo" ),
"label_original" => "Topic Title Minimum Length",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"topic_title_max_length" => [
"type" => "number",
"min" => 0,
"max" => 250,
"label" => esc_html__( "Topic Title Maximum Length", "wpforo" ),
"label_original" => "Topic Title Maximum Length",
"description" => esc_html__( "Topic title length cannot be set more than 250 character.", "wpforo" ),
"description_original" => "Topic title length cannot be set more than 250 character.",
"docurl" => "",
],
"topic_body_min_length" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Topic Content Minimum Length", "wpforo" ),
"label_original" => "Topic Content Minimum Length",
"description" => esc_html__( "Set this option value 0 to remove this limit.", "wpforo" ),
"description_original" => "Set this option value 0 to remove this limit.",
"docurl" => "",
],
"topic_body_max_length" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Topic Content Maximum Length", "wpforo" ),
"label_original" => "Topic Content Maximum Length",
"description" => esc_html__( "Set this option value 0 to remove this limit.", "wpforo" ),
"description_original" => "Set this option value 0 to remove this limit.",
"docurl" => "",
],
"post_body_min_length" => [
"type" => "number",
"min" => 1,
"label" => esc_html__( "Reply Content Minimum Length", "wpforo" ),
"label_original" => "Reply Content Minimum Length",
"description" => esc_html__( "You cannot set this value 0.", "wpforo" ),
"description_original" => "You cannot set this value 0.",
"docurl" => "",
],
"post_body_max_length" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Reply Content Maximum Length", "wpforo" ),
"label_original" => "Reply Content Maximum Length",
"description" => esc_html__( "Set this option value 0 to remove this limit.", "wpforo" ),
"description_original" => "Set this option value 0 to remove this limit.",
"docurl" => "",
],
"comment_body_min_length" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Comment Content Minimum Length", "wpforo" ),
"label_original" => "Comment Content Minimum Length",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"comment_body_max_length" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Comment Content Maximum Length", "wpforo" ),
"label_original" => "Comment Content Maximum Length",
"description" => esc_html__( "Set this option value 0 to remove this limit.", "wpforo" ),
"description_original" => "Set this option value 0 to remove this limit.",
"docurl" => "",
],
"edit_own_topic_durr" => [
"type" => "minute",
"min" => 0,
"label" => esc_html__( "Allow Edit Own Topic within (minutes)", "wpforo" ),
"label_original" => "Allow Edit Own Topic within (minutes)",
"description" => esc_html__( "Set this option value 0 to remove time limit.", "wpforo" ),
"description_original" => "Set this option value 0 to remove time limit.",
"docurl" => "",
],
"delete_own_topic_durr" => [
"type" => "minute",
"min" => 0,
"label" => esc_html__( "Allow Delete Own Topic within (minutes)", "wpforo" ),
"label_original" => "Allow Delete Own Topic within (minutes)",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"edit_own_post_durr" => [
"type" => "minute",
"min" => 0,
"label" => esc_html__( "Allow Edit Own Post within (minutes)", "wpforo" ),
"label_original" => "Allow Edit Own Post within (minutes)",
"description" => esc_html__( "Set this option value 0 to remove time limit.", "wpforo" ),
"description_original" => "Set this option value 0 to remove time limit.",
"docurl" => "",
],
"delete_own_post_durr" => [
"type" => "minute",
"min" => 0,
"label" => esc_html__( "Allow Delete Own Post within (minutes)", "wpforo" ),
"label_original" => "Allow Delete Own Post within (minutes)",
"description" => esc_html__( "Set this option value 0 to remove time limit.", "wpforo" ),
"description_original" => "Set this option value 0 to remove time limit.",
"docurl" => "",
],
"edit_topic" => [
"type" => "radio",
"label" => esc_html__( "Display Topic Editing Information", "wpforo" ),
"label_original" => "Display Topic Editing Information",
"description" => esc_html__(
"The topic edit logging information 'This post was modified 2 hours ago by John' is displayed under modified topic first post content...",
"wpforo"
),
"description_original" => "The topic edit logging information 'This post was modified 2 hours ago by John' is displayed under modified topic first post content...",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/posting-editor-settings/#display-topic-and-post-editing-information",
],
"edit_post" => [
"type" => "radio",
"label" => esc_html__( "Display Post Editing Information", "wpforo" ),
"label_original" => "Display Post Editing Information",
"description" => esc_html__( "The post edit logging information 'This post was modified 2 hours ago by John' is displayed under modified post content...", "wpforo" ),
"description_original" => "The post edit logging information 'This post was modified 2 hours ago by John' is displayed under modified post content...",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/posting-editor-settings/#display-topic-and-post-editing-information",
],
"edit_log_display_limit" => [
"type" => "number",
"min" => 0,
"label" => esc_html__( "Limit Post Editing Information", "wpforo" ),
"label_original" => "Limit Post Editing Information",
"description" => esc_html__(
"Limit the post edit logging information 'This post was modified 2 hours ago by John'. Set this option value 0 if you want to disable limiting.",
"wpforo"
),
"description_original" => "Limit the post edit logging information 'This post was modified 2 hours ago by John'. Set this option value 0 if you want to disable limiting.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/posting-editor-settings/#limit-post-editing-information",
],
"is_preview_on" => [
"type" => "radio",
"label" => esc_html__( "Post Preview", "wpforo" ),
"label_original" => "Post Preview",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/posting-editor-settings/#post-preview-and-auto-drafting",
],
"is_draft_on" => [
"type" => "radio",
"label" => esc_html__( "Post Revisions and Draft Saving", "wpforo" ),
"label_original" => "Post Revisions and Draft Saving",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/posting-editor-settings/#post-preview-and-auto-drafting",
],
"auto_draft_interval" => [
"type" => "select",
"label" => esc_html__( "Auto Drafting Interval", "wpforo" ),
"label_original" => "Auto Drafting Interval",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 0, 'label' => __( 'disabled', 'wpforo' ) ],
[ 'value' => 15000, 'label' => __( '15 seconds', 'wpforo' ) ],
[ 'value' => 30000, 'label' => __( '30 seconds', 'wpforo' ) ],
[ 'value' => 60000, 'label' => __( '1 minute', 'wpforo' ) ],
[ 'value' => 120000, 'label' => __( '2 minute', 'wpforo' ) ],
[ 'value' => 300000, 'label' => __( '5 minute', 'wpforo' ) ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/posting-editor-settings/#post-preview-and-auto-drafting",
],
"max_drafts_per_page" => [
"type" => "number",
"min" => 3,
"label" => esc_html__( "Max Number of Revisions", "wpforo" ),
"label_original" => "Max Number of Revisions",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/posting-editor-settings/#post-preview-and-auto-drafting",
],
"max_upload_size" => [
"type" => "megabyte",
"label" => esc_html__( "Maximum upload file size", "wpforo" ),
"label_original" => "Maximum upload file size",
"description" => esc_html__(
"You can not set this value more than 'upload_max_filesize' and 'post_max_size'. If you want to increase server parameters please contact to your hosting service support.",
"wpforo"
),
"description_original" => "You can not set this value more than 'upload_max_filesize' and 'post_max_size'. If you want to increase server parameters please contact to your hosting service support.",
"docurl" => "",
],
"attachs_to_medialib" => [
"type" => "radio",
"label" => esc_html__( "Insert Forum Attachments to Media Library", "wpforo" ),
"label_original" => "Insert Forum Attachments to Media Library",
"description" => esc_html__( "Enable this option to be able manage forum attachments in Dashboard > Media > Library admin page.", "wpforo" ),
"description_original" => "Enable this option to be able manage forum attachments in Dashboard > Media > Library admin page.",
"docurl" => "",
],
"topic_editor_toolbar_location" => [
"type" => "radio",
"label" => esc_html__( "Toolbar Location of the Topic Editor", "wpforo" ),
"label_original" => "Toolbar Location of the Topic Editor",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 'top', 'label' => __( 'Top', 'wpforo' ) ],
[ 'value' => 'bottom', 'label' => __( 'Bottom', 'wpforo' ) ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/posting-editor-settings/#rich-editor-toolbar-location",
],
"reply_editor_toolbar_location" => [
"type" => "radio",
"label" => esc_html__( "Toolbar Location of the Reply Editor", "wpforo" ),
"label_original" => "Toolbar Location of the Reply Editor",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 'top', 'label' => __( 'Top', 'wpforo' ) ],
[ 'value' => 'bottom', 'label' => __( 'Bottom', 'wpforo' ) ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/posting-editor-settings/#rich-editor-toolbar-location",
],
"content_do_shortcode" => [
"type" => "radio",
"label" => esc_html__( "Enable WordPress Shortcodes in Post Content", "wpforo" ),
"label_original" => "Enable WordPress Shortcodes in Post Content",
"description" => "",
"description_original" => "",
"docurl" => "",
],
'extra_html_tags' => [
"type" => "textarea",
"label" => esc_html__( "Allow extra HTML tags", "wpforo" ),
"label_original" => "Allow extra HTML tags",
"description" => __(
'By default, wpForo allows all secure HTML tags in post content. Allowing a new HTML tag may affect your forum security. For example the <iframe> and <script> HTML tags may be used by spammers and hackers to load 3rd party ads and viruses to forum.
Example of adding a new HTML tags: b, em, p, code, style, a(href title), img(src alt title), embed(src width height) ...',
"wpforo"
),
"description_original" => 'By default, wpForo allows all secure HTML tags in post content. Allowing a new HTML tag may affect your forum security. For example the <iframe> and <script> HTML tags may be used by spammers and hackers to load 3rd party ads and viruses to forum.
Example of adding a new HTML tags: b, em, p, code, style, a(href title), img(src alt title), embed(src width height) ...',
"docurl" => "",
],
],
],
'members' => [
"title" => esc_html__( "Display Members", "wpforo" ),
"title_original" => "Display Members",
"icon" => '',
"description" => esc_html__(
"This is the members' directory setting page. wpForo forum has a members' page where you can see all members. The members' page is called members directory, and it's general for all forum boards. Starting from wpForo 2.0 you can create multiple separate forum boards in your website, however the members' directory will be one for all boards.",
"wpforo"
),
"description_original" => "This is the members' directory setting page. wpForo forum has a members' page where you can see all members. The members' page is called members directory, and it's general for all forum boards. Starting from wpForo 2.0 you can create multiple separate forum boards in your website, however the members' directory will be one for all forums.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-members/",
"status" => "ok",
"base" => true,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/members.php' );
},
"options" => [
"list_order" => [
"type" => "select",
"label" => esc_html__( "Members List Ordering", "wpforo" ),
"label_original" => "Members List Ordering",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 'online_time', 'label' => __( 'Last Online time', 'wpforo' ) ],
[ 'value' => 'posts__asc', 'label' => __( 'Posts Ascending', 'wpforo' ) ],
[ 'value' => 'posts__desc', 'label' => __( 'Posts Descending', 'wpforo' ) ],
[ 'value' => 'user_registered__asc', 'label' => __( 'Join Date Ascending', 'wpforo' ) ],
[ 'value' => 'user_registered__desc', 'label' => __( 'Join Date Descending', 'wpforo' ) ],
[ 'value' => 'display_name__asc', 'label' => __( 'Display Name A->Z', 'wpforo' ) ],
[ 'value' => 'display_name__desc', 'label' => __( 'Display Name Z->A', 'wpforo' ) ],
],
"docurl" => "",
],
"hide_inactive" => [
"type" => "radio",
"label" => esc_html__( "Hide Inactive Members", "wpforo" ),
"label_original" => "Hide Inactive Members",
"description" => esc_html__( "Members who have not confirmed their email after the registration are set as 'inactive'. In most cases they are spam bots.", "wpforo" ),
"description_original" => "Members who have not confirmed their email after the registration are set as 'inactive'. In most cases they are spam bots.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/display-members/#hide-inactive-members",
],
"members_per_page" => [
"type" => "number",
"min" => 5,
"label" => esc_html__( "Number of Members per Page", "wpforo" ),
"label_original" => "Number of Members per Page",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"search_type" => [
"type" => "radio",
"label" => esc_html__( "Members Search Type", "wpforo" ),
"label_original" => "Members Search Type",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 'search', 'label' => __( 'Search', 'wpforo' ) ],
[ 'value' => 'filter', 'label' => __( 'Filter', 'wpforo' ) ],
],
"docurl" => "",
],
],
],
'profiles' => [
"title" => esc_html__( "Member Profile", "wpforo" ),
"title_original" => "Member Profile",
"icon" => '',
"description" => esc_html__(
"wpForo forum has a powerful user profile system which can be managed in this setting page. Here you can hide/show forum header and footer on profile pages, manage profile components like avatars, member titles, nickname, URL structure, signature etc... In case you use BuddyPress or Ultimate Members plugins, you can switch forum profile page to the plugin profile page.",
"wpforo"
),
"description_original" => "wpForo forum has a powerful user profile system which can be managed in this setting page. Here you can hide/show forum header and footer on profile pages, manage profile components like avatars, member titles, nickname, URL structure, signature etc... In case you use BuddyPress or Ultimate Members plugins, you can switch forum profile page to the plugin profile page.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-profile/",
"status" => "ok",
"base" => true,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/profiles.php' );
},
"options" => [
"profile" => [
"type" => "select",
"label" => esc_html__( "Profile Page", "wpforo" ),
"label_original" => "Profile Page",
"description" => "",
"description_original" => "",
"variants" => [
[
'value' => 'default',
'label' => esc_html__( 'Default', 'wpforo' ),
'title' => esc_attr__( 'wpForo Profile only for the forum, WordPress Profile for others, including comment authors, post authors and etc...', 'wpforo' ),
],
[
'value' => 'wpforo',
'label' => esc_html__( 'wpForo', 'wpforo' ),
'title' => esc_attr__( 'wpForo Profile for the whole website including forum, comment authors, post authors and etc...', 'wpforo' ),
],
[
'value' => 'bp',
'label' => esc_html__( 'BuddyPress', 'wpforo' ),
'title' => esc_attr__( 'BuddyPress Profile for the whole website including forum.', 'wpforo' ),
'disabled' => ! class_exists( 'BP_Component' ),
],
[
'value' => 'um',
'label' => esc_html__( 'Ultimate Member', 'wpforo' ),
'title' => esc_attr__( 'Ultimate Member Profile for the whole website including forum.', 'wpforo' ),
'disabled' => ! function_exists( 'UM' ),
],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-profile/#profile-page",
],
"profile_header" => [
"type" => "radio",
"label" => esc_html__( "Show Forum Header on Profile Pages", "wpforo" ),
"label_original" => "Show Forum Header on Profile Pages",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-profile/#show-forum-header-and-footer-on-profile-pages",
],
"profile_footer" => [
"type" => "radio",
"label" => esc_html__( "Show Forum Footer under Profile Pages", "wpforo" ),
"label_original" => "Show Forum Footer under Profile Pages",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-profile/#show-forum-header-and-footer-on-profile-pages",
],
"url_structure" => [
"type" => "radio",
"label" => esc_html__( "Members URL Structure", "wpforo" ),
"label_original" => "Members URL Structure",
"description" => esc_html__( "By default ", "wpforo" ),
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-profile/#members-url-structure-and-member-nickname",
"variants" => [
[ 'value' => 'id', 'label' => 'USER_ID', 'title' => wpforo_url( 'profile', 'member' ) . 'USER_ID/' ],
[ 'value' => 'nicename', 'label' => 'USER_NICENAME', 'title' => wpforo_url( 'profile', 'member' ) . 'USER_NICENAME/' ],
],
],
"online_status_timeout" => [
"type" => "minute",
"label" => esc_html__( "Online Status Timeout (minutes)", "wpforo" ),
"label_original" => "Online Status Timeout (minutes)",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"custom_title_is_on" => [
"type" => "radio",
"label" => esc_html__( "Member Custom Titles", "wpforo" ),
"label_original" => "Member Custom Titles",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-profile/#member-custom-title",
],
"default_title" => [
"type" => "text",
"label" => esc_html__( "Member Custom Title by Default", "wpforo" ),
"label_original" => "Member Custom Title by Default",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-profile/#member-custom-title",
],
"title_groupids" => [
"type" => "checkbox",
"label" => esc_html__( "Display Member Primary Usergroup", "wpforo" ),
"label_original" => "Display Member Primary Usergroup",
"description" => esc_html__( "The names of selected usergroups will be displayed under the corresponding usergroup's users avatar in forum posts.", "wpforo" ),
"description_original" => "The selected usergroup names will be displayed under the corresponding usergroup users avatar in forum posts.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-profile/#display-primary-and-secondary-usergroups-under-post-author-avata",
"variants" => $this->get_variants_usergroups(),
],
"title_secondary_groupids" => [
"type" => "checkbox",
"label" => esc_html__( "Display Member Secondary Usergroup", "wpforo" ),
"label_original" => "Display Member Secondary Usergroup",
"description" => esc_html__(
"The names of selected secondary usergroups will be displayed under the corresponding usergroup's users avatar in forum posts.",
"wpforo"
),
"description_original" => "The names of selected secondary usergroups will be displayed under the corresponding usergroup's users avatar in forum posts.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-profile/#display-primary-and-secondary-usergroups-under-post-author-avata",
"variants" => $this->get_variants_usergroups( [], true ),
],
"mention_nicknames" => [
"type" => "radio",
"label" => esc_html__( "Display Member Nicknames", "wpforo" ),
"label_original" => "Display Member Nicknames",
"description" => esc_html__(
"Nicknames are displayed with '@' symbol, like @john and are used for the user mentioning in posts. Please note, that this is not the user login name (username). If they are the same, users can change their nickname in the profile account page to secure the login name.",
"wpforo"
),
"description_original" => "Nicknames are displayed with '@' symbol, like @john and are used for the user mentioning in posts. Please note, that this is not the user login name (username). If they are the same, users can change their nickname in the profile account page to secure the login name.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-profile/#members-url-structure-and-member-nickname",
],
"avatars" => [
"type" => "radio",
"label" => esc_html__( "Enable Avatars", "wpforo" ),
"label_original" => "Enable Avatars",
"description" => esc_html__(
"Using this option you can disable user avatars for the forum but you cannot show avatars if the WordPress native avatar option is disabled. So please make sure the 'Show Avatars' option is enabled in WordPress Settings > Discussion admin page.",
"wpforo"
),
"description_original" => "Using this option you can disable user avatars for the forum but you cannot show avatars if the WordPress native avatar option is disabled. So please make sure the 'Show Avatars' option is enabled in WordPress Settings > Discussion admin page.",
"docurl" => "",
],
"custom_avatars" => [
"type" => "radio",
"label" => esc_html__( "Enable Custom Avatars", "wpforo" ),
"label_original" => "Enable Custom Avatars",
"description" => esc_html__(
"By default wpForo uses WordPress avatars. In most cases it's the Gravatar. If this option is enabled, users will be able to set their avatars with external URLs or upload from their devices.",
"wpforo"
),
"description_original" => "By default wpForo uses WordPress avatars. In most cases it's the Gravatar. If this option is enabled, users will be able to set their avatars with external URLs or upload from their devices.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-profile/#enable-custom-avatars",
],
"replace_avatar" => [
"type" => "radio",
"label" => esc_html__( "Site-wide Usage of Forum Profile Avatar", "wpforo" ),
"label_original" => "Site-wide Usage of Forum Profile Avatar",
"description" => esc_html__( "If this option is enabled, wpForo will try to use its avatar in all available places.", "wpforo" ),
"description_original" => "If this option is enabled, wpForo will try to use its avatar in all available places.",
"docurl" => "",
],
"default_cover" => [
"type" => "cover",
"label" => esc_html__( "The Default Profile Cover Image", "wpforo" ),
"label_original" => "The Default Profile Cover Image",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"signature" => [
"type" => "radio",
"label" => esc_html__( "Allow Member Signature", "wpforo" ),
"label_original" => "Allow Member Signature",
"description" => esc_html__( "You can edit usergroups and enable/disable the signature for each usergroups individually.", "wpforo" ),
"description_original" => "You can edit usergroups and enable/disable the signature for each usergroups individually.",
"docurl" => "",
],
],
],
'rating' => [
"title" => esc_html__( "Member Rating", "wpforo" ),
"title_original" => "Member Rating",
"icon" => '',
"description" => esc_html__(
"wpForo has built-in member reputation system based on points user get when he/she creates new topic, posts, when gets likes or dislikes. This system grants Rating Titles and Rating Badges. All component of this system (number of posts, titles, badges) can be customized and changed in this admin section.",
'wpforo'
) . '
' . esc_html__(
" For an advanced user ranking and members' point awarding system we recommend using myCRED plugin with the integration addon: ",
"wpforo"
) . 'wpForo myCRED Integration.',
"description_original" => "wpForo has built-in member reputation system based on points user get when he/she creates new topic, posts, when gets likes or dislikes. This system grants Rating Titles and Rating Badges. All component of this system (number of posts, titles, badges) can be customized and changed in this admin section.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-rating/",
"status" => "ok",
"base" => true,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/rating.php' );
},
"options" => [
"rating" => [
"type" => "radio",
"label" => esc_html__( "Enable Member Rating Badges", "wpforo" ),
"label_original" => "Enable Member Rating Badges",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-rating/#enable-member-rating-badges-and-titles",
],
"rating_title" => [
"type" => "radio",
"label" => esc_html__( "Enable Member Rating Titles", "wpforo" ),
"label_original" => "Enable Member Rating Titles",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-rating/#enable-member-rating-badges-and-titles",
],
"member_rating" => [
"label" => esc_html__( "Member Reputation and Titles", "wpforo" ),
"label_original" => "Member Reputation and Titles",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"topic_points" => [
"type" => "float",
"min" => 0,
"label" => esc_html__( "Points for One Topic", "wpforo" ),
"label_original" => "Points for One Topic",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-rating/#reputation-point-counting",
],
"post_points" => [
"type" => "float",
"min" => 0,
"label" => esc_html__( "Points for One Post", "wpforo" ),
"label_original" => "Points for 1 Post",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-rating/#reputation-point-counting",
],
"like_points" => [
"type" => "float",
"min" => 0,
"label" => esc_html__( "Points for One Like", "wpforo" ),
"label_original" => "Points for One Post",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-rating/#reputation-point-counting",
],
"dislike_points" => [
"type" => "float",
"max" => 0,
"label" => esc_html__( "Points for One Dislike", "wpforo" ),
"label_original" => "Points for One Dislike",
"description" => esc_html__( "This should be set a negative value like '-1' to decrease the user reputation points if he/she receives dislikes.", "wpforo" ),
"description_original" => "This should be set a negative value like '-1' to decrease the user reputation points if he/she receives dislikes.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/member-rating/#reputation-point-counting",
],
"rating_title_ug" => [
"type" => "checkbox",
"label" => esc_html__( "Enable Reputation Titles for Selected Usergroups", "wpforo" ),
"label_original" => "Enable Reputation Titles for Selected Usergroups",
"description" => "",
"description_original" => "",
"docurl" => "",
"variants" => $this->get_variants_usergroups(),
],
"rating_badge_ug" => [
"type" => "checkbox",
"label" => esc_html__( "Enable Reputation Badges for Selected Usergroups", "wpforo" ),
"label_original" => "Enable Reputation Badges for Selected Usergroups",
"description" => "",
"description_original" => "",
"docurl" => "",
"variants" => $this->get_variants_usergroups(),
],
"levels" => [
"type" => "ratinglevels",
"label" => esc_html__( "Member Reputation and Titles", "wpforo" ),
"label_original" => "Member Reputation and Titles",
"description" => "",
"description_original" => "",
"docurl" => "",
],
],
],
'authorization' => [
"title" => esc_html__( "Login & Registration", "wpforo" ),
"title_original" => "Login & Registration",
"icon" => '',
"description" => esc_html__(
"wpForo is one of the very rare plugins which has its own user registration and login pages. Both features are based on WordPress functions. Here you can control user registration, account approval and deleting settings. Also, you can manage redirections after user login, register and password resting actions.",
"wpforo"
) . '
' . esc_html__(
'If you need to customize the registration form and add custom fields, you should check out user custom field builder addon:',
'wpforo'
) . ' wpForo Users Custom Field.',
"description_original" => "wpForo is one of the very rare plugins which has its own user registration and login pages. Both features are based on WordPress functions. Here you can control user registration, account approval and deleting settings. Also, you can manage redirections after user login, register and password resting actions.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/login-registration/",
"status" => "ok",
"base" => true,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/authorization.php' );
},
"options" => [
"user_register" => [
"type" => "radio",
"label" => esc_html__( "Enable User Registration", "wpforo" ),
"label_original" => "Enable User Registration",
"description" => esc_html__(
"This option is not synced with WordPress 'Anyone can register' option in Dashboard > Settings > General admin page. If this option is enabled new users will always be able to register.",
"wpforo"
),
"description_original" => "This option is not synced with WordPress 'Anyone can register' option in Dashboard > Settings > General admin page. If this option is enabled new users will always be able to register.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/login-registration/#enable-user-registration",
],
"user_register_email_confirm" => [
"type" => "radio",
"label" => esc_html__( "Enable User Registration email confirmation", "wpforo" ),
"label_original" => "Enable User Registration email confirmation",
"description" => esc_html__( "If you have enabled this option, after registering, user can not login without confirming the email.", "wpforo" ),
"description_original" => "If you have enabled this option, after registering, user can not login without confirming the email.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/login-registration/#enable-user-registration-email-confirmation",
],
"manually_approval" => [
"type" => "radio",
"label" => esc_html__( "Enable User Manually Approval System", "wpforo" ),
"label_original" => "Enable User Manually Approval System",
"description" => esc_html__( "If you have enabled this option, after registering, user can not login without manually approving of administrator.", "wpforo" ),
"description_original" => "If you have enabled this option, after registering, user can not login without manually approving of administrator.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/login-registration/#enable-user-manually-approval-system",
],
"manually_approval_contact_form" => [
"type" => "radio",
"label" => esc_html__( "Admin Contacting Form under the \"Awaiting approval\" Message", "wpforo" ),
"label_original" => "Admin Contacting Form under the \"Awaiting approval\" Message",
"description" => esc_html__(
"This option displays a contact form under the 'Awaiting approval' text to allow inactive users send a message to website administrator. This message will be sent to the administrator email address.",
"wpforo"
),
"description_original" => "This option displays a contact form under the 'Awaiting approval' text to allow inactive users send a message to website administrator. This message will be sent to the administrator email address.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/login-registration/#enable-user-manually-approval-system",
],
"role_synch" => [
"type" => "radio",
"label" => esc_html__( "Role-Usergroup Synchronization", "wpforo" ),
"label_original" => "Role-Usergroup Synchronization",
"description" => esc_html__(
"Keep enabled this option to synch WordPress User Roles with Forum Usergroups. This connection allows to automatically change Usergroup of a user when his/her User Role is changed by administrators or by membership plugins. In other words this option allows to manage Usergroups based on Users Roles, thus you can directly control users forum accesses based on Users Roles. If this option is turned off, User Roles don't have any affection to users forum accesses, they are only controlled by forum Usergroups.",
"wpforo"
),
"description_original" => "Keep enabled this option to synch WordPress User Roles with Forum Usergroups. This connection allows to automatically change Usergroup of a user when his/her User Role is changed by administrators or by membership plugins. In other words this option allows to manage Usergroups based on Users Roles, thus you can directly control users forum accesses based on Users Roles. If this option is turned off, User Roles don't have any affection to users forum accesses, they are only controlled by forum Usergroups.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/login-registration/#role-usergroup-synchronization",
],
"user_delete_method" => [
"type" => "radio",
"label" => esc_html__( "User Delete Method", "wpforo" ),
"label_original" => "User Delete Method",
"description" => esc_html__(
"Choose which method to use when user delete action comes. [Soft] option will not remove any content this user has already created. It'll only remove the user with all account information. The posts' author name will be changed to \"Anonymous ID\". [Hard] option will remove the user data and any content this user has already created.",
"wpforo"
),
"description_original" => "Choose which method to use when user delete action comes. [Soft] option will not remove any content this user has already created. It'll only remove the user with all account information. The posts' author name will be changed to \"Anonymous ID\". [Hard] option will remove the user data and any content this user has already created.",
"variants" => [
[
'value' => 'soft',
'label' => __( 'Soft', 'wpforo' ),
'title' => __( 'This method will delete only profile information so all content which created this user will be kept and renamed as Anonymous.', 'wpforo' ),
],
[ 'value' => 'hard', 'label' => __( 'Hard', 'wpforo' ), 'title' => __( 'This method will also remove all user information and content.', 'wpforo' ) ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/login-registration/#user-delete-method",
],
"send_email_after_user_delete" => [
"type" => "radio",
"label" => esc_html__( "Send Email to Admins After User Self Delete", "wpforo" ),
"label_original" => "Send Email to Admins After User Self Delete",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"use_our_register_url" => [
"type" => "radio",
"label" => esc_html__( "Replace Registration Page URL to Forum Registration Page URL", "wpforo" ),
"label_original" => "Replace Registration Page URL to Forum Registration Page URL",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"use_our_login_url" => [
"type" => "radio",
"label" => esc_html__( "Replace Login Page URL to Forum Login Page URL", "wpforo" ),
"label_original" => "Replace Login Page URL to Forum Login Page URL",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"use_our_lostpassword_url" => [
"type" => "radio",
"label" => esc_html__( "Replace Reset Password Page URL to Forum Reset Password Page URL", "wpforo" ),
"label_original" => "Replace Reset Password Page URL to Forum Reset Password Page URL",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"custom_auth_urls" => [
"type" => "wrap",
"label" => esc_html__( 'Custom Authorization URLs', 'wpforo' ),
"label_original" => "Custom Authorization URLs",
"description" => __(
'Use this option only if you have set other pages for authorization. wpForo doesn\'t change its own URLs, these options are only for other plugin compatibility. For example, if you use BuddyPress or Ultimate Member plugin you can set your profile plugin url',
'wpforo'
),
"description_original" => "Use this option only if you have set other pages for authorization. wpForo doesn\'t change its own URLs, these options are only for other plugin compatibility. For example, if you use BuddyPress or Ultimate Member plugin you can set your profile plugin url",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/login-registration/#custom-authorization-urls",
"options_keys" => [ 'login_url', 'register_url', 'lost_password_url' ],
],
"login_url" => [
"type" => "text",
"placeholder" => esc_attr__( "Login URL", 'wpforo' ),
"label" => "",
"label_original" => "",
"description" => "",
"description_original" => "",
],
"register_url" => [
"type" => "text",
"placeholder" => esc_attr__( "Register URL", 'wpforo' ),
"label" => "",
"label_original" => "",
"description" => '',
"description_original" => '',
],
"lost_password_url" => [
"type" => "text",
"placeholder" => esc_attr__( "Lost Password", 'wpforo' ),
"label" => "",
"label_original" => "",
"description" => '',
"description_original" => '',
],
"custom_redirect_urls" => [
"type" => "wrap",
"label" => esc_html__( 'Custom Redirection URLs after following actions:', 'wpforo' ),
"label_original" => "Custom Redirection URLs after following actions:",
"description" => esc_html__( 'For member profile, account and subscription pages use following URLs:', 'wpforo' ) . '
' . wpforo_url(
'profile',
'member'
) . '
' . wpforo_url( 'account', 'member' ) . '
' . wpforo_url( 'subscriptions', 'member' ),
"description_original" => "For member profile, account and subscription pages use following URLs:",
"docurl" => "",
"options_keys" => [ 'redirect_url_after_login', 'redirect_url_after_register', 'redirect_url_after_confirm_sbscrb' ],
],
"redirect_url_after_login" => [
"type" => "text",
"placeholder" => "Redirect after login",
"label" => "",
"label_original" => "",
"description" => "",
"description_original" => "",
],
"redirect_url_after_register" => [
"type" => "text",
"placeholder" => "Redirect after registration",
"label" => "",
"label_original" => "",
"description" => "",
"description_original" => "",
],
"redirect_url_after_confirm_sbscrb" => [
"type" => "text",
"placeholder" => "Redirect after subscription confirmation",
"label" => "",
"label_original" => "",
"description" => "",
"description_original" => "",
],
],
],
'email' => [
"title" => esc_html__( "Email Settings", "wpforo" ),
"title_original" => "Email Settings",
"icon" => '',
"description" => esc_html__(
"Here, you can configure header information (FROM name and email) of forum specific emails. You can set administrators and moderators email addresses to get email notification when a new topic or reply is posted. Here you can also find user registration, password resetting and post reporting email templates.",
"wpforo"
),
"description_original" => "Here, you can configure header information (FROM name and email) of forum specific emails. You can set administrators and moderators email addresses to get email notification when a new topic or reply is posted. Here you can also find user registration, password resetting and post reporting email templates.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/email-settings/",
"status" => "ok",
"base" => true,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/email.php' );
},
"options" => [
"from_name" => [
"type" => "text",
"label" => esc_html__( "FROM Name", "wpforo" ),
"label_original" => "FROM Name",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/email-settings/#from-name-and-email-address",
],
"from_email" => [
"type" => "text",
"label" => esc_html__( "FROM Email Address", "wpforo" ),
"label_original" => "FROM Email Address",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/email-settings/#from-name-and-email-address",
],
"admin_emails" => [
"type" => "text_,",
"label" => esc_html__( "Forum Admins Email Addresses", "wpforo" ),
"label_original" => "Forum Admins Email Addresses",
"description" => esc_html__( "Comma separated email addresses of forum administrators to get forum notifications. For example post report messages.", "wpforo" ),
"description_original" => "Comma separated email addresses of forum administrators to get forum notifications. For example post report messages.",
"docurl" => "",
],
"new_topic_notify" => [
"type" => "radio",
"label" => esc_html__( "Notify Admins via Email on New Topic", "wpforo" ),
"label_original" => "Notify Admins via Email on New Topic",
"description" => esc_html__( "Send Notification emails to all email addresses (comma separated ) of forum administrators when a new Topic is created.", "wpforo" ),
"description_original" => "Send Notification emails to all email addresses (comma separated ) of forum administrators when a new Topic is created.",
"docurl" => "",
],
"new_reply_notify" => [
"type" => "radio",
"label" => esc_html__( "Notify Admins via Email on New Post", "wpforo" ),
"label_original" => "Notify Admins via Email on New Post",
"description" => esc_html__( "Send Notification emails to all email addresses (comma separated ) of forum administrators when a new Reply is created.", "wpforo" ),
"description_original" => "Send Notification emails to all email addresses (comma separated ) of forum administrators when a new Reply is created.",
"docurl" => "",
],
"async_notifications" => [
"type" => "radio",
"label" => esc_html__( "Send Notification Emails Asynchronously", "wpforo" ),
"label_original" => "Send Notification Emails Asynchronously",
"description" => esc_html__( "Queue subscription, mention, and follow notification emails to be sent in the background. This prevents delays when posting replies to topics with many subscribers. Recommended for forums with active subscriptions.", "wpforo" ),
"description_original" => "Queue subscription, mention, and follow notification emails to be sent in the background. This prevents delays when posting replies to topics with many subscribers. Recommended for forums with active subscriptions.",
"docurl" => "",
],
"disable_new_user_admin_notification" => [
"type" => "radio",
"label" => esc_html__( "Stop Sending Emails to Admins on New User Registration", "wpforo" ),
"label_original" => "Stop Sending Emails to Admins on New User Registration",
"description" => esc_html__(
"If you have enabled this option, after registering, the admin will not receive an email notification for newly registered user.",
"wpforo"
),
"description_original" => "If you have enabled this option, after registering, the admin will not receive an email notification for newly registered user.",
"docurl" => "",
],
"report_email_subject" => [
"type" => "text",
"label" => esc_html__( "Report Message Subject", "wpforo" ),
"label_original" => "Report Message Subject",
"description" => "",
"description_original" => "",
"docurl" => "",
],
"report_email_message" => [
"type" => "richeditor",
"media_buttons" => true,
"label" => esc_html__( "Report Message Body", "wpforo" ),
"label_original" => "Report Message Body",
"description" => sprintf(
'
',
"description" => esc_html__(
"Akismet checks your forum posts with authors form submissions against their global database of spam to prevent your site from publishing malicious content. Akismet is well integrated with wpForo and it makes the wpForo Spam Control more intuitive and productive.",
"wpforo"
),
"description_original" => "Akismet checks your forum posts with authors form submissions against their global database of spam to prevent your site from publishing malicious content. Akismet is well integrated with wpForo and it makes the wpForo Spam Control more intuitive and productive.",
"docurl" => "",
"status" => "ok",
"base" => true,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/akismet.php' );
},
"options" => [
"akismet" => [
"type" => "radio",
"label" => esc_html__( "Enable Akismet Integration", "wpforo" ),
"label_original" => "Enable Akismet Antispam Protection",
"description" => esc_html__( "Please make sure the Akismet plugin installed and the Akismet API keys are configured.", "wpforo" ),
"description_original" => "",
"docurl" => "",
],
],
],
'rss' => [
"title" => esc_html__( "Forum Feed / RSS", "wpforo" ),
"title_original" => "Forum Feed / RSS",
"icon" => '',
"description" => esc_html__(
"RSS (Rich Site Summary; originally RDF Site Summary; often called Really Simple Syndication) uses a family of standard web feed formats to publish frequently updated information like new topics in forums, new posts in topics. An RSS document (called “feed”, “web feed”, or “channel”) includes topic and post titles/links/excerpt publishing date and author’s name.",
"wpforo"
),
"description_original" => "RSS (Rich Site Summary; originally RDF Site Summary; often called Really Simple Syndication) uses a family of standard web feed formats to publish frequently updated information like new topics in forums, new posts in topics. An RSS document (called “feed”, “web feed”, or “channel”) includes topic and post titles/links/excerpt publishing date and author’s name.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/forum-feed-rss/",
"status" => "ok",
"base" => false,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/rss.php' );
},
"options" => [
"feed" => [
"type" => "radio",
"label" => esc_html__( "Enable RSS Feed", "wpforo" ),
"label_original" => "Enable RSS Feed",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/forum-feed-rss/#enable-rss-feed",
],
"feed_general" => [
"type" => "radio",
"label" => esc_html__( "Enable General RSS Feed", "wpforo" ),
"label_original" => "Enable General RSS Feed",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/forum-feed-rss/#enable-general-rss-feed",
],
"feed_forum" => [
"type" => "radio",
"label" => esc_html__( "Enable Forum RSS Feed", "wpforo" ),
"label_original" => "Enable Forum RSS Feed",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/forum-feed-rss/#enable-forum-rss-feed",
],
"feed_topic" => [
"type" => "radio",
"label" => esc_html__( "Enable Topic RSS Feed", "wpforo" ),
"label_original" => "Enable Topic RSS Feed",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/forum-feed-rss/#enable-topic-rss-feed",
],
],
],
'social' => [
"title" => esc_html__( "Social Share", "wpforo" ),
"title_original" => "Share",
"icon" => '',
"description" => esc_html__(
"Here you can find social network sharing options. wpForo allows sharing almost all forum content (forums, topics, posts individually). The share button style and location is very flexible. There are a lot of options to set button style, type, location, etc...",
"wpforo"
),
"description_original" => "Here you can find social network sharing options. wpForo allows sharing almost all forum content (forums, topics, posts individually). The share button style and location is very flexible. There are a lot of options to set button style, type, location, etc...",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/social-share/",
"status" => "ok",
"base" => false,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/social.php' );
},
"options" => [
"sb" => [
"label" => esc_html__( "Active Share Buttons", "wpforo" ),
"label_original" => "Active Share Buttons",
"description" => esc_html__(
"Check the checkbox share options to activate.",
"wpforo"
),
"description_original" => "Check the checkbox share options to activate.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/social-share/#active-share-buttons",
],
"sb_on" => [
"type" => "radio",
"label" => esc_html__( "Enable General Share Buttons", "wpforo" ),
"label_original" => "Enable General Share Buttons",
"description" => esc_html__(
"General share buttons are forum and topic sharing buttons. They are located on the top and the bottom of each page. You can manage location of these buttons using 'Share Buttons Location' options below.",
"wpforo"
),
"description_original" => "General share buttons are forum and topic sharing buttons. They are located on the top and the bottom of each page. You can manage location of these buttons using 'Share Buttons Location' options below.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/social-share/#enable-general-share-buttons",
],
"sb_toggle_on" => [
"type" => "radio",
"label" => esc_html__( "Enable Post Sharing Toggle", "wpforo" ),
"label_original" => "Enable Post Sharing Toggle",
"description" => "",
"description_original" => "",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/social-share/#general-share-buttons-color",
],
"sb_style" => [
"type" => "radio",
"label" => esc_html__( "General Share Buttons Color", "wpforo" ),
"label_original" => "General Share Buttons Color",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 'grey', 'label' => 'Grey' ],
[ 'value' => 'colored', 'label' => 'Colored' ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/social-share/#general-share-buttons-color",
],
"sb_type" => [
"type" => "radio",
"label" => esc_html__( "General Share Buttons Type", "wpforo" ),
"label_original" => "General Share Buttons Type",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 'icon', 'label' => 'Icon' ],
[ 'value' => 'button', 'label' => 'Button' ],
[ 'value' => 'button_count', 'label' => 'Counter' ],
],
"docurl" => "",
],
"sb_toggle" => [
"label" => esc_html__( "Post Sharing Toggle", "wpforo" ),
"label_original" => "Post Sharing Toggle",
"description" => esc_html__(
"Post sharing toggle allows you to share posts individually. You can see post sharing toggles on the left, right side or in top bar of each post. The toggle blue color is the current primary color (#12) of your forum style. For example, if you use the red forum style, the color of all share toggles will be red. This doesn't affect share button colors. They are always gray with original colors on mouse hover.",
"wpforo"
),
"description_original" => "Post sharing toggle allows you to share posts individually. You can see post sharing toggles on the left, right side or in top bar of each post. The toggle blue color is the current primary color (#12) of your forum style. For example, if you use the red forum style, the color of all share toggles will be red. This doesn't affect share button colors. They are always gray with original colors on mouse hover.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/social-share/#post-sharing-toggle",
],
"sb_toggle_type" => [
"type" => "radio",
"label" => esc_html__( "Post Sharing Toggle View", "wpforo" ),
"label_original" => "Post Sharing Toggle View",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 'collapsed', 'label' => __( 'Collapsed', 'wpforo' ) ],
[ 'value' => 'expanded', 'label' => __( 'Expanded', 'wpforo' ) ],
],
"docurl" => "https://wpforo.com/docs/wpforo-v3/settings/social-share/#post-sharing-toggle",
],
"sb_icon" => [
"type" => "radio",
"label" => esc_html__( "Post Sharing Toggle Icon", "wpforo" ),
"label_original" => "Post Sharing Toggle Icon",
"description" => "",
"description_original" => "",
"variants" => [
[ 'value' => 'mixed', 'label' => 'Mixed' ],
[ 'value' => 'figure', 'label' => ' Figure' ],
[ 'value' => 'square', 'label' => ' Square' ],
],
"docurl" => "",
],
"sb_location" => [
"label" => esc_html__( "General Share Button Locations", "wpforo" ),
"label_original" => "General Share Button Locations",
"description" => esc_html__( "The general share buttons can be displayed on both (top and bottom) locations.", "wpforo" ),
"description_original" => "The general share buttons can be displayed on both (top and bottom) locations.",
"docurl" => "",
],
"sb_location_toggle" => [
"label" => esc_html__( "Post Sharing Toggle Locations", "wpforo" ),
"label_original" => "Post Sharing Toggle Locations",
"description" => esc_html__( "The post sharing toggle can be displayed either on the left side or on the top of each post.", "wpforo" ),
"description_original" => "The post sharing toggle can be displayed either on the left side or on the top of each post.",
"docurl" => "",
],
],
],
'buddypress' => [
"title" => esc_html__( "BuddyPress Integration", "wpforo" ),
"title_original" => "BuddyPress Integration",
"icon" => '',
"description" => esc_html__(
"wpForo is well integrated with BuddyPress and with all plugins and themes based on BuddyPress. The integration includes changing forum profile page URL to BuddyPress profile page URL, Activity Integration and Forum Tabs on BuddyPress profile page.",
"wpforo"
),
"description_original" => "wpForo is well integrated with BuddyPress and with all plugins and themes based on BuddyPress. The integration includes changing forum profile page URL to BuddyPress profile page URL, Activity Integration and Forum Tabs on BuddyPress profile page.",
"docurl" => "",
"status" => "ok",
"base" => true,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/buddypress.php' );
},
"options" => [
"activity" => [
"type" => "radio",
"label" => esc_html__( "BuddyPress Activity Integration", "wpforo" ),
"label_original" => "BuddyPress Activity Integration",
"description" => esc_html__( "Posts members activity (new topic, new reply, post like) to BuddyPress Profile Activity page.", "wpforo" ),
"description_original" => "Posts members activity (new topic, new reply, post like) to BuddyPress Profile Activity page.",
"docurl" => "",
],
"notification" => [
"type" => "radio",
"label" => esc_html__( "BuddyPress Notification Integration", "wpforo" ),
"label_original" => "BuddyPress Notification Integration",
"description" => esc_html__( "Creates notification on new forum reply in BuddyPress Profile Notification page.", "wpforo" ),
"description_original" => "Creates notification on new forum reply in BuddyPress Profile Notification page.",
"docurl" => "",
],
"forum_tab" => [
"type" => "radio",
"label" => esc_html__( "BuddyPress Profile Forum Tab Integration", "wpforo" ),
"label_original" => "BuddyPress Profile Forum Tab Integration",
"description" => esc_html__(
"Adds 'Forums' tab with 'Created Topics', 'Posted Replies', 'Liked Posts' and 'Subscriptions' sub-tabs to BuddyPress Profile page.",
"wpforo"
),
"description_original" => "Adds 'Forums' tab with 'Created Topics', 'Posted Replies', 'Liked Posts' and 'Subscriptions' sub-tabs to BuddyPress Profile page.",
"docurl" => "",
],
],
],
'um' => [
"title" => esc_html__( "Ultimate Members Integration", "wpforo" ),
"title_original" => "Ultimate Members Integration",
"icon" => '',
"description" => esc_html__(
"wpForo is well integrated with Ultimate Members plugin. The integration includes changing forum profile page URL to Ultimate Members profile page URL, forum tabs in Ultimate Members profile page. Also, wpForo is integrated with Ultimate Members' Real-time Notifications addon.",
"wpforo"
),
"description_original" => "wpForo is well integrated with Ultimate Members plugin. The integration includes changing forum profile page URL to Ultimate Members profile page URL, forum tabs in Ultimate Members profile page. Also, wpForo is integrated with Ultimate Members' Real-time Notifications addon.",
"docurl" => "",
"status" => "ok",
"base" => true,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/um.php' );
},
"options" => [
"notification" => [
"type" => "radio",
"label" => esc_html__( "Ultimate Member Notification Integration", "wpforo" ),
"label_original" => "Ultimate Member Notification Integration",
"description" => esc_html__(
"Creates notification on new forum reply in Ultimate Member Real-time Notification system. This integration requires",
"wpforo"
) . ' Real-time Notifications ' . __(
'plugin.',
'wpforo'
),
"description_original" => "Creates notification on new forum reply in Ultimate Member Real-time Notification system. This integration requires" . ' Real-time Notifications ',
"docurl" => "",
],
"forum_tab" => [
"type" => "radio",
"label" => esc_html__( "Ultimate Member Profile Forum Tab Integration", "wpforo" ),
"label_original" => "Ultimate Member Profile Forum Tab Integration",
"description" => esc_html__(
"Adds 'Forums' tab with 'Created Topics', 'Posted Replies', 'Liked Posts' and 'Subscriptions' sub-tabs to Ultimate Member Profile page.",
"wpforo"
),
"description_original" => "Adds 'Forums' tab with 'Created Topics', 'Posted Replies', 'Liked Posts' and 'Subscriptions' sub-tabs to Ultimate Member Profile page.",
"docurl" => "",
],
],
],
'legal' => [
"title" => esc_html__( "Privacy & Forum Rules", "wpforo" ),
"title_original" => "Privacy & Rules",
"icon" => '',
"description" => "",
"description_original" => "",
"docurl" => "",
"status" => "ok",
"base" => true,
"callback_for_page" => function() {
require_once( WPFORO_DIR . '/admin/settings/legal.php' );
},
"options" => [
"contact_page_url" => [
"label" => esc_html__( "Contact Information", "wpforo" ),
"label_original" => "Contact Information",
"description" => esc_html__(
"According to the GDPR, all users should have an option to contact website administrator in following cases: ",
"wpforo"
) . '), bold (), italic (), and links (). Leave empty to use the default message.",
"wpforo"
),
"description_original" => "Custom welcome message shown when users start a new conversation. Use {user_display_name} to insert the user's name. Supports basic HTML: line breaks ( ), bold (), italic (), and links (). Leave empty to use the default message.",
"placeholder" => esc_html__( "Hello {user_display_name}!\nI am your AI assistant. How can I help you today?", "wpforo" ),
"docurl" => "",
],
"chatbot_no_content_message" => [
"type" => "textarea",
"label" => esc_html__( "No Content Found Message", "wpforo" ),
"label_original" => "No Content Found Message",
"description" => esc_html__(
"Custom message shown when the chatbot cannot find relevant forum content to answer a question. Supports basic HTML: links (), line breaks ( ), and images ( ), and images ( %3$s %3$s %3$s %12$s %3$s %4$s %5$s %4$s %4$s %4$s
), paragraphs (
), paragraphs (). Leave empty to use the default message.",
"wpforo"
),
"description_original" => "Custom message shown when the chatbot cannot find relevant forum content to answer a question. Supports basic HTML: links (), line breaks (
), paragraphs (). Leave empty to use the default message.",
"placeholder" => esc_html__( "I couldn't find information about that topic in the forum. Please try searching directly or create a new topic to start a discussion.", "wpforo" ),
"docurl" => "",
],
"chatbot_max_conversations" => [
"type" => "number",
"label" => esc_html__( "Max Conversations per User", "wpforo" ),
"label_original" => "Max Conversations per User",
"description" => esc_html__(
"Maximum number of conversations a user can have. Older conversations are automatically deleted when this limit is reached.",
"wpforo"
),
"description_original" => "Maximum number of conversations a user can have. Older conversations are automatically deleted when this limit is reached.",
"min" => 1,
"max" => 50,
"docurl" => "",
],
"chatbot_context_update_threshold" => [
"type" => "number",
"label" => esc_html__( "Context Update Frequency", "wpforo" ),
"label_original" => "Context Update Frequency",
"description" => esc_html__(
"Number of messages between context summary updates. Lower values maintain better context but use more AI resources.",
"wpforo"
),
"description_original" => "Number of messages between context summary updates. Lower values maintain better context but use more AI resources.",
"min" => 3,
"max" => 20,
"docurl" => "",
],
"chatbot_use_rag" => [
"type" => "radio",
"label" => esc_html__( "Enable Forum Knowledge (RAG)", "wpforo" ),
"label_original" => "Enable Forum Knowledge (RAG)",
"description" => esc_html__(
"When enabled, the chatbot will search indexed forum content to provide accurate answers based on your forum's knowledge base.",
"wpforo"
),
"description_original" => "When enabled, the chatbot will search indexed forum content to provide accurate answers based on your forum's knowledge base.",
"docurl" => "",
],
"chatbot_use_local_context" => [
"type" => "radio",
"label" => esc_html__( "Enable Page Context", "wpforo" ),
"label_original" => "Enable Page Context",
"description" => esc_html__(
"When enabled, the chatbot will consider the content of the current page (topic, forum) when answering questions.",
"wpforo"
),
"description_original" => "When enabled, the chatbot will consider the content of the current page (topic, forum) when answering questions.",
"docurl" => "",
],
"chatbot_allowed_groups" => [
"type" => "checkbox",
"label" => esc_html__( "Allowed Usergroups", "wpforo" ),
"label_original" => "Allowed Usergroups",
"description" => esc_html__(
"Select which usergroups can use the AI Chatbot. New usergroups must be manually added here after creation.",
"wpforo"
),
"description_original" => "Select which usergroups can use the AI Chatbot. New usergroups must be manually added here after creation.",
"variants" => $this->get_variants_usergroups_chatbot(),
"docurl" => "",
],
"chatbot_language" => [
"type" => "select",
"label" => esc_html__( "Chatbot Response Language", "wpforo" ),
"label_original" => "Chatbot Response Language",
"description" => esc_html__(
"Select the language for AI chatbot responses.",
"wpforo"
),
"description_original" => "Select the language for AI chatbot responses.",
"variants" => $this->get_variants_ai_languages(),
"docurl" => "",
],
"chatbot_min_score" => [
"type" => "number",
"label" => esc_html__( "Minimum Relevance Score (%)", "wpforo" ),
"label_original" => "Minimum Relevance Score (%)",
"description" => esc_html__(
"Forum content below this relevance threshold is excluded from chatbot context. For local storage, the threshold is automatically scaled (divided by 3) with a minimum of 15%. Recommended: 30%.",
"wpforo"
),
"description_original" => "Forum content below this relevance threshold is excluded from chatbot context. For local storage, the threshold is automatically scaled (divided by 3) with a minimum of 15%. Recommended: 30%.",
"min" => 15,
"max" => 100,
"docurl" => "",
],
// AI Bot Reply
"bot_reply" => [
"type" => "radio",
"label" => esc_html__( "Enable AI Bot Reply and Reply Suggestion", "wpforo" ),
"label_original" => "Enable AI Bot Reply and Reply Suggestion",
"description" => esc_html__(
"Enable or disable the AI Bot Reply feature. This adds a Bot Reply button to posts and a Suggest Reply button in the reply form for moderators.",
"wpforo"
),
"description_original" => "Enable or disable the AI Bot Reply feature. This adds a Bot Reply button to posts and a Suggest Reply button in the reply form for moderators.",
"docurl" => "https://wpforo.com/docs/wpforo-v3/ai-features/ai-bot-reply/",
],
"bot_reply_quality" => [
"type" => "select",
"label" => esc_html__( "AI Bot Reply Quality", "wpforo" ),
"label_original" => "AI Bot Reply Quality",
"description" => esc_html__(
"Select the AI model quality for bot replies. Higher quality provides better responses but uses more credits.",
"wpforo"
),
"description_original" => "Select the AI model quality for bot replies. Higher quality provides better responses but uses more credits.",
"variants" => [
[ 'value' => 'fast', 'label' => esc_html__( 'Fast (1 credit)', 'wpforo' ) ],
[ 'value' => 'balanced', 'label' => esc_html__( 'Balanced (2 credits)', 'wpforo' ) ],
[ 'value' => 'advanced', 'label' => esc_html__( 'Advanced (3 credits)', 'wpforo' ) ],
[ 'value' => 'premium', 'label' => esc_html__( 'Premium (4 credits)', 'wpforo' ) ],
],
"docurl" => "",
],
"bot_reply_style" => [
"type" => "select",
"label" => esc_html__( "Reply Style", "wpforo" ),
"label_original" => "Reply Style",
"description" => esc_html__(
"Choose the style of AI-generated replies. This affects how the AI approaches answering questions.",
"wpforo"
),
"description_original" => "Choose the style of AI-generated replies. This affects how the AI approaches answering questions.",
"variants" => [
[ 'value' => 'neutral', 'label' => esc_html__( 'Neutral', 'wpforo' ) ],
[ 'value' => 'helpful_answer', 'label' => esc_html__( 'Helpful Answer - Direct solution', 'wpforo' ) ],
[ 'value' => 'clarifying_questions', 'label' => esc_html__( 'Clarifying Questions - Ask for details', 'wpforo' ) ],
[ 'value' => 'provide_context', 'label' => esc_html__( 'Provide Context - Background info', 'wpforo' ) ],
[ 'value' => 'encourage_discussion', 'label' => esc_html__( 'Encourage Discussion - Promote conversation', 'wpforo' ) ],
[ 'value' => 'step_by_step', 'label' => esc_html__( 'Step-by-Step Solution - Detailed guide', 'wpforo' ) ],
[ 'value' => 'quick_answer', 'label' => esc_html__( 'Quick Answer - Brief response', 'wpforo' ) ],
[ 'value' => 'expert_opinion', 'label' => esc_html__( 'Expert Opinion - Authoritative view', 'wpforo' ) ],
[ 'value' => 'supportive', 'label' => esc_html__( 'Supportive Response - Empathetic help', 'wpforo' ) ],
[ 'value' => 'resource_sharing', 'label' => esc_html__( 'Resource Sharing - Links/references', 'wpforo' ) ],
[ 'value' => 'alternatives', 'label' => esc_html__( 'Alternative Solutions - Multiple options', 'wpforo' ) ],
[ 'value' => 'troubleshooting', 'label' => esc_html__( 'Troubleshooting Guide - Diagnostic approach', 'wpforo' ) ],
[ 'value' => 'best_practice', 'label' => esc_html__( 'Best Practice Advice - Recommended way', 'wpforo' ) ],
[ 'value' => 'experience_sharing', 'label' => esc_html__( 'Experience Sharing - Personal story', 'wpforo' ) ],
[ 'value' => 'detailed_explanation', 'label' => esc_html__( 'Detailed Explanation - Comprehensive answer', 'wpforo' ) ],
[ 'value' => 'summary', 'label' => esc_html__( 'Summary Response - Condensed info', 'wpforo' ) ],
[ 'value' => 'follow_up', 'label' => esc_html__( 'Follow-up Questions - Dig deeper', 'wpforo' ) ],
[ 'value' => 'confirmation', 'label' => esc_html__( 'Confirmation - Validate understanding', 'wpforo' ) ],
[ 'value' => 'constructive_feedback', 'label' => esc_html__( 'Constructive Feedback - Helpful critique', 'wpforo' ) ],
[ 'value' => 'collaborative', 'label' => esc_html__( 'Collaborative - Work together approach', 'wpforo' ) ],
[ 'value' => 'educational', 'label' => esc_html__( 'Educational - Teaching moment', 'wpforo' ) ],
[ 'value' => 'acknowledgment', 'label' => esc_html__( 'Acknowledgment - Recognize the issue', 'wpforo' ) ],
[ 'value' => 'recommendation', 'label' => esc_html__( 'Recommendation - Suggest specific action', 'wpforo' ) ],
],
"docurl" => "",
],
"bot_reply_tone" => [
"type" => "select",
"label" => esc_html__( "Reply Tone", "wpforo" ),
"label_original" => "Reply Tone",
"description" => esc_html__(
"Choose the tone for AI-generated replies. This affects the personality and voice of the response.",
"wpforo"
),
"description_original" => "Choose the tone for AI-generated replies. This affects the personality and voice of the response.",
"variants" => [
[ 'value' => 'neutral', 'label' => esc_html__( 'Neutral', 'wpforo' ) ],
[ 'value' => 'professional', 'label' => esc_html__( 'Professional - Business-like and formal', 'wpforo' ) ],
[ 'value' => 'friendly', 'label' => esc_html__( 'Friendly - Warm and approachable', 'wpforo' ) ],
[ 'value' => 'casual', 'label' => esc_html__( 'Casual - Relaxed and informal', 'wpforo' ) ],
[ 'value' => 'technical', 'label' => esc_html__( 'Technical - Detailed and precise', 'wpforo' ) ],
[ 'value' => 'enthusiastic', 'label' => esc_html__( 'Enthusiastic - Excited and energetic', 'wpforo' ) ],
[ 'value' => 'helpful', 'label' => esc_html__( 'Helpful - Supportive and guiding', 'wpforo' ) ],
[ 'value' => 'authoritative', 'label' => esc_html__( 'Authoritative - Expert and confident', 'wpforo' ) ],
[ 'value' => 'conversational', 'label' => esc_html__( 'Conversational - Like chatting with a friend', 'wpforo' ) ],
[ 'value' => 'educational', 'label' => esc_html__( 'Educational - Teaching and informative', 'wpforo' ) ],
[ 'value' => 'inspirational', 'label' => esc_html__( 'Inspirational - Motivating and uplifting', 'wpforo' ) ],
[ 'value' => 'humorous', 'label' => esc_html__( 'Humorous - Light-hearted and witty', 'wpforo' ) ],
[ 'value' => 'serious', 'label' => esc_html__( 'Serious - Focused and earnest', 'wpforo' ) ],
[ 'value' => 'encouraging', 'label' => esc_html__( 'Encouraging - Positive and supportive', 'wpforo' ) ],
[ 'value' => 'warm', 'label' => esc_html__( 'Warm - Caring and compassionate', 'wpforo' ) ],
[ 'value' => 'direct', 'label' => esc_html__( 'Direct - Straightforward and to the point', 'wpforo' ) ],
[ 'value' => 'thoughtful', 'label' => esc_html__( 'Thoughtful - Considerate and reflective', 'wpforo' ) ],
[ 'value' => 'empathetic', 'label' => esc_html__( 'Empathetic - Understanding and relatable', 'wpforo' ) ],
[ 'value' => 'confident', 'label' => esc_html__( 'Confident - Self-assured and decisive', 'wpforo' ) ],
[ 'value' => 'curious', 'label' => esc_html__( 'Curious - Inquisitive and engaging', 'wpforo' ) ],
[ 'value' => 'playful', 'label' => esc_html__( 'Playful - Fun and lighthearted', 'wpforo' ) ],
[ 'value' => 'sincere', 'label' => esc_html__( 'Sincere - Genuine and honest', 'wpforo' ) ],
],
"docurl" => "",
],
"bot_reply_length" => [
"type" => "select",
"label" => esc_html__( "Reply Length", "wpforo" ),
"label_original" => "Reply Length",
"description" => esc_html__(
"Choose the target length for AI-generated replies.",
"wpforo"
),
"description_original" => "Choose the target length for AI-generated replies.",
"variants" => [
[ 'value' => 'brief', 'label' => esc_html__( 'Brief (100-200 words)', 'wpforo' ) ],
[ 'value' => 'medium', 'label' => esc_html__( 'Medium (200-400 words)', 'wpforo' ) ],
[ 'value' => 'detailed', 'label' => esc_html__( 'Detailed (400-800 words)', 'wpforo' ) ],
],
"docurl" => "",
],
"bot_reply_knowledge_source" => [
"type" => "select",
"label" => esc_html__( "Knowledge Source", "wpforo" ),
"label_original" => "Knowledge Source",
"description" => esc_html__(
"Choose where the AI should look for information when generating replies.",
"wpforo"
),
"description_original" => "Choose where the AI should look for information when generating replies.",
"variants" => [
[ 'value' => 'forum_only', 'label' => esc_html__( 'Forum Content Only', 'wpforo' ) ],
[ 'value' => 'forum_and_ai', 'label' => esc_html__( 'Forum + AI Knowledge', 'wpforo' ) ],
[ 'value' => 'forum_and_web', 'label' => esc_html__( 'Forum + Web Search', 'wpforo' ) ],
[ 'value' => 'forum_and_web_and_ai', 'label' => esc_html__( 'Forum + Web + AI Knowledge', 'wpforo' ) ],
[ 'value' => 'ai_only', 'label' => esc_html__( 'AI Knowledge Only', 'wpforo' ) ],
],
"docurl" => "",
],
"bot_reply_includes" => [
"type" => "checkbox",
"label" => esc_html__( "Include in Replies", "wpforo" ),
"label_original" => "Include in Replies",
"description" => esc_html__(
"Select what elements the AI may include in bot replies.",
"wpforo"
),
"description_original" => "Select what elements the AI may include in bot replies.",
"variants" => $this->get_variants_bot_reply_includes(),
"docurl" => "",
],
"bot_reply_language" => [
"type" => "select",
"label" => esc_html__( "Bot Reply Response Language", "wpforo" ),
"label_original" => "Bot Reply Response Language",
"description" => esc_html__(
"Select the language for AI-generated bot replies and reply suggestions.",
"wpforo"
),
"description_original" => "Select the language for AI-generated bot replies and reply suggestions.",
"variants" => $this->get_variants_ai_languages(),
"docurl" => "",
],
"bot_reply_unapproved" => [
"type" => "radio",
"label" => esc_html__( "Set Bot Replies as Unapproved", "wpforo" ),
"label_original" => "Set Bot Replies as Unapproved",
"description" => esc_html__(
"When enabled, bot-generated replies will be set as unapproved and require manual approval before being visible.",
"wpforo"
),
"description_original" => "When enabled, bot-generated replies will be set as unapproved and require manual approval before being visible.",
"docurl" => "",
],
"bot_reply_user_id" => [
"type" => "select",
"label" => esc_html__( "Bot Reply User", "wpforo" ),
"label_original" => "Bot Reply User",
"description" => esc_html__(
"Select the WordPress user account that will be used for bot-generated replies. Create a dedicated user account for the bot.",
"wpforo"
),
"description_original" => "Select the WordPress user account that will be used for bot-generated replies. Create a dedicated user account for the bot.",
"variants" => $this->get_variants_bot_users(),
"docurl" => "",
],
"bot_reply_max_per_topic" => [
"type" => "number",
"label" => esc_html__( "Max Bot Replies per Topic", "wpforo" ),
"label_original" => "Max Bot Replies per Topic",
"description" => esc_html__(
"Maximum number of bot replies allowed per topic. Set to 0 for unlimited.",
"wpforo"
),
"description_original" => "Maximum number of bot replies allowed per topic. Set to 0 for unlimited.",
"min" => 0,
"max" => 1000,
"docurl" => "",
],
"bot_reply_max_per_day" => [
"type" => "number",
"label" => esc_html__( "Max Bot Replies per Day", "wpforo" ),
"label_original" => "Max Bot Replies per Day",
"description" => esc_html__(
"Maximum number of bot replies allowed per day across all topics. Set to 0 for unlimited.",
"wpforo"
),
"description_original" => "Maximum number of bot replies allowed per day across all topics. Set to 0 for unlimited.",
"min" => 0,
"max" => 1000,
"docurl" => "",
],
],
];
}
// Reorder: place 'ai' right before 'activity' if AI is available
if( isset( $this->info->core['ai'] ) ) {
$reordered = [];
foreach( $this->info->core as $key => $value ) {
if( $key === 'activity' ) {
$reordered['ai'] = $this->info->core['ai'];
}
if( $key !== 'ai' ) {
$reordered[$key] = $value;
}
}
$this->info->core = $reordered;
}
$this->info->core = apply_filters( 'wpforo_settings_init_core_info', $this->info->core );
}
private function init_addons() {
$this->info->addons = [];
$this->info->addons = apply_filters( 'wpforo_settings_init_addons_info', $this->info->addons );
}
private function get_option_info( $group, $name ) {
if( ! ( $setting = wpfval( $this->info->core, $group ) ) && ! ( $setting = wpfval( $this->info->addons, $group ) ) ) return [];
if( ! $option = wpfval( $setting, 'options', $name ) ) return [];
return (array) $option;
}
private function get_option_variants( $group, $name, $value = null ) {
$variants = [
[ 'value' => true, 'label' => __( 'Yes', 'wpforo' ) ],
[ 'value' => false, 'label' => __( 'No', 'wpforo' ) ],
];
if( $info = $this->get_option_info( $group, $name ) ) {
if( $_variants = (array) wpfval( $info, 'variants' ) ) $variants = $_variants;
}
return array_map( function( $variant ) use ( $value ) {
return $this->fix_form_element_attrs( $variant, $value );
}, $variants );
}
private function fix_form_element_attrs( $variant, $value = null ) {
$variant = array_merge(
[
'value' => null,
'label' => '',
'title' => '',
'id' => '',
'class' => '',
'style' => '',
'alt' => '',
'max' => null,
'min' => null,
'maxlength' => null,
'minlength' => null,
'autofocus' => false,
'disabled' => false,
'readonly' => false,
'checked' => false,
'selected' => false,
],
(array) $variant
);
$variant['checked'] = $variant['selected'] = in_array( $variant['value'], (array) $value, true );
if( is_bool( $variant['value'] ) ) $variant['value'] = intval( $variant['value'] );
return $variant;
}
public function get_doc_link( $info ) {
return ( $docurl = wpfval( $info, 'docurl' ) ) ? sprintf(
'
' . __( 'Max Allowed Size is ' ) . $max . $after . '
' . __(
'Server "upload_max_filesize" is '
) . $this->_SERVER['upload_max_filesize_human'] . '
' . __( 'Server "post_max_size" is ' ) . $this->_SERVER['post_max_size_human'];
}
} elseif( $type === 'minute' ) {
$type = 'number';
$value = intval( $value ) / 60;
if( ! wpfkey( $info, 'min' ) ) $min = 1;
$after = __( 'Minute', 'wpforo' );
}
$attr_min = $attr_max = '';
if( in_array( $type, [ 'number', 'range', 'minute' ], true ) ) {
if( ! is_null( $min ) ) $attr_min = sprintf( 'min="%1$d"', $min );
if( ! is_null( $max ) ) $attr_max = sprintf( 'max="%1$d"', $max );
} elseif( in_array( $type, [ 'date', 'datetime-local', 'month', 'time', 'week' ], true ) ) {
if( ! is_null( $min ) ) $attr_min = sprintf( 'min="%1$s"', $min );
if( ! is_null( $max ) ) $attr_max = sprintf( 'max="%1$s"', $max );
} else {
if( ! is_null( $min ) ) $attr_min = sprintf( 'minlength="%1$d"', $min );
if( ! is_null( $max ) ) $attr_max = sprintf( 'maxlength="%1$d"', $max );
}
return sprintf(
'', $value ) : '',
$this->get_doc_link( $info )
);
}
private function cover( $group, $name, $value ) {
if( ! $info = $this->get_option_info( $group, $name ) ) return '';
$option_name = $group . '[' . $name . ']';
return sprintf(
'
member->levels(); ?>
| »
\n Message: [message],
\n
\n [post_url]", 'wpforo' ),
'overwrite_new_user_notification_admin' => true,
'wp_new_user_notification_email_admin_subject' => __( "[blogname] New User Registration", 'wpforo' ),
'wp_new_user_notification_email_admin_message' => __( "New user registration on your site [blogname]:\n\nUsername: [user_login]\n\nEmail: [user_email]\n", 'wpforo' ),
'after_user_delete_notification_email_admin_subject' => __( "User Self-Deleted Their Account", 'wpforo' ),
'after_user_delete_notification_email_admin_message' => __(
"This is to notify you that a user has successfully deleted their account from the website. Below are the details: \n\nUser ID: [user_userid]\n\nUsername: [user_login]\n\nEmail: [user_email]\n\nDeletion Date and Time: [datetime] \n",
'wpforo'
),
'overwrite_new_user_notification' => true,
'wp_new_user_notification_email_subject' => __( "[blogname] Your username and password info", 'wpforo' ),
'wp_new_user_notification_email_message' => __( "Username: [user_login]\n\nTo set your password, visit the following address:\n\n[set_password_url]\n\n", 'wpforo' ),
'overwrite_reset_password_email' => true,
'reset_password_email_message' => __(
"Hello! \n\n You asked us to reset your password for your account using the email address [user_login]. \n\n If this was a mistake, or you didn't ask for a password reset, just ignore this email and nothing will happen. \n\n To reset your password, visit the following address: \n\n [reset_password_url] \n\n Thanks!",
'wpforo'
),
'after_user_approve_email_subject' => __( '[blogname] - Your Account Has been Approved', 'wpforo' ),
'after_user_approve_email_message' => __(
'Hi [user_login] , Thank you for your registration. Your account has been approved. You can login here: [login_link]',
'wpforo'
),
];
$this->_subscriptions = [
'subscribe_confirmation' => true,
'subscribe_checkbox_on_post_editor' => true,
'subscribe_checkbox_default_status' => false,
'user_mention_notify' => true,
'user_following_notify' => true,
'confirmation_email_subject' => __( "Please confirm subscription to [entry_title]", 'wpforo' ),
'confirmation_email_message' => __(
"Hello [user_display_name]!
\n Thank you for subscribing.
\n This is an automated response.
\n We are glad to inform you that after confirmation you will get updates from - [entry_title].
\n Please click on link below to complete this step.
\n [confirm_link]",
'wpforo'
),
'new_topic_notification_email_subject' => __( "New Topic", 'wpforo' ),
'new_topic_notification_email_message' => __(
"Hello [user_display_name]!
\n New topic has been created on your subscribed forum - [forum_link].\n
\n [topic_title]\n \n [topic_body]\n
\n
\n If you want to unsubscribe from this forum please use the link below.
\n [unsubscribe_link]",
'wpforo'
),
'new_post_notification_email_subject' => __( "New Reply", 'wpforo' ),
'new_post_notification_email_message' => __(
"Hello [user_display_name]!
\n New reply has been posted on your subscribed topic - [topic_link].\n
\n [post_title]\n \n [post_body]\n
\n
\n If you want to unsubscribe from this topic please use the link below.
\n [unsubscribe_link]",
'wpforo'
),
'user_mention_email_subject' => __( "You have been mentioned in forum post", 'wpforo' ),
'user_mention_email_message' => __(
"Hi [user_display_name]!
\n\n You have been mentioned in a post on \"[topic_title]\" by [owner_display_name].
\n\n [post_link]",
'wpforo'
),
'user_following_email_subject' => __( "New Post from [owner_display_name]", 'wpforo' ),
'user_following_email_message' => __(
"Hello [user_display_name]!
\n New content has been posted by [owner_display_name] you are following.\n
\n [post_link]\n \n [post_body]\n
\n
\n If you want to unfollow this user please use the link below.
\n [unsubscribe_link]",
'wpforo'
),
];
$this->_notifications = [
'notifications' => true,
'notifications_live' => false,
'notifications_bar' => true,
];
$this->_logging = [
'view_logging' => true,
'track_logging' => true,
'goto_unread' => true,
'goto_unread_button' => false,
'display_forum_current_viewers' => true,
'display_topic_current_viewers' => true,
'display_recent_viewers' => true,
'display_admin_viewers' => true,
];
$this->_seo = [
'seo_title' => true,
'seo_meta' => true,
'seo_profile' => false,
'forums_sitemap' => true,
'topics_sitemap' => true,
'members_sitemap' => true,
'dofollow' => [],
'noindex' => [],
];
$this->_antispam = [
'spam_filter' => true,
'spam_user_ban' => false,
'should_unapprove_after_report' => false,
'spam_filter_level_topic' => 10,
'spam_filter_level_post' => 10,
'new_user_max_posts' => 3,
'unapprove_post_if_user_is_new' => false,
'min_number_posts_to_attach' => 0,
'min_number_posts_to_edit_account' => 3,
'min_number_posts_to_link' => 0,
'limited_file_ext' => [ 'pdf', 'doc', 'docx', 'txt', 'htm', 'html', 'rtf', 'xml', 'xls', 'xlsx', 'zip', 'rar', 'tar', 'gz', 'bzip', '7z' ],
'flood_protection_enabled' => true,
'flood_posts_per_minute' => 5,
'flood_posts_per_hour' => 30,
'flood_ip_protection_enabled' => false,
'flood_posts_per_ip_hour' => 30,
'flood_action' => 'block',
'flood_temp_ban_duration' => '15',
'spam_file_scanner' => true,
'exclude_file_ext' => [ 'pdf', 'doc', 'docx', 'txt' ],
];
$this->_akismet = [
'akismet' => true,
];
$this->_rss = [
'feed' => true,
'feed_general' => true,
'feed_forum' => true,
'feed_topic' => true,
];
$this->_social = [
'sb' => [ 'fb' => true, 'tw' => true, 'wapp' => true, 'lin' => false, 'vk' => false ],
'sb_on' => true,
'sb_toggle_on' => false,
'sb_style' => 'grey',
'sb_type' => 'icon',
'sb_toggle' => 4,
'sb_toggle_type' => 'collapsed',
'sb_icon' => 'mixed',
'sb_location' => [ 'top' => false, 'bottom' => true ],
'sb_location_toggle' => 'top',
];
$this->_legal = [
'contact_page_url' => '',
'checkbox_terms_privacy' => false,
'checkbox_email_password' => true,
'page_terms' => '',
'page_privacy' => '',
'checkbox_forum_privacy' => false,
'forum_privacy_text' => wpforo_get_file_content( WPFORO_DIR . '/admin/assets/html/privacy-policy-gdpr.html' ),
'cookies' => true,
'rules_text' => wpforo_get_file_content( WPFORO_DIR . '/admin/assets/html/simple-forum-rules.html' ),
'rules_checkbox' => false,
];
$this->_ai = [
'assistant' => true,
'assistant_highlight' => true,
'assistant_icon' => '',
'assistant_open' => true,
'assistant_classic_search' => false,
'assistant_preferences' => false,
'search' => true,
'search_quality' => 'fast',
'search_min_score' => 30,
'search_enhance' => true,
'search_enhance_quality' => 'balanced',
'search_language' => '',
'search_max_results' => 5,
'translation' => true,
'translation_quality' => 'fast',
'topic_summary' => true,
'topic_summary_quality' => 'balanced',
'topic_summary_style' => 'detailed',
'topic_summary_min_replies' => 1,
'topic_summary_language' => '',
// AI Topic Suggestions defaults
'topic_suggestions' => true,
'topic_suggestions_quality' => 'balanced',
'topic_suggestions_min_words' => 3,
'topic_suggestions_max_calls' => 3,
'topic_suggestions_show_related' => false,
'topic_suggestions_show_answer' => false,
'topic_suggestions_max_similar' => 3,
'topic_suggestions_max_related' => 3,
'topic_suggestions_similarity' => 55,
'topic_suggestions_language' => '',
// AI Content Moderation defaults
'moderation_spam' => true,
'moderation_spam_quality' => 'balanced',
'moderation_spam_use_context' => true,
'moderation_spam_min_indexed' => 100,
'moderation_spam_action_detected' => 'unapprove_ban',
'moderation_spam_action_suspected' => 'unapprove',
'moderation_spam_action_uncertain' => 'unapprove',
'moderation_spam_action_clean' => 'none',
'moderation_spam_exempt_minposts' => 10,
'moderation_spam_autoban_unapproved' => 5,
'moderation_toxicity' => true,
'moderation_toxicity_sensitivity' => 'medium',
'moderation_toxicity_action' => 'unapprove',
'moderation_compliance' => false,
'moderation_compliance_custom_policy' => 0,
'moderation_compliance_custom_rules' => 0,
'moderation_compliance_action' => 'unapprove',
// AI Assistant Chatbot defaults
'chatbot' => true,
'chatbot_quality' => 'balanced',
'chatbot_welcome_message' => "Hello {user_display_name}!\r\nI'm your forum assistant. I can help you find information and answer questions related to this forum. What would you like to know?",
'chatbot_no_content_message' => 'I couldn\'t find information about that topic in the forum. Please try searching directly or create a new topic to start a discussion.',
'chatbot_max_conversations' => 10,
'chatbot_context_update_threshold' => 5,
'chatbot_use_rag' => true,
'chatbot_use_local_context' => false,
'chatbot_allowed_groups' => [1, 2, 3, 5],
'chatbot_language' => '',
'chatbot_min_score' => 30,
// AI Bot Reply defaults
'bot_reply' => true,
'bot_reply_quality' => 'premium',
'bot_reply_style' => 'helpful_answer',
'bot_reply_tone' => 'neutral',
'bot_reply_length' => 'medium',
'bot_reply_knowledge_source' => 'forum_and_ai',
'bot_reply_includes' => [],
'bot_reply_language' => '',
'bot_reply_unapproved' => true,
'bot_reply_user_id' => 0,
'bot_reply_max_per_topic' => 10,
'bot_reply_max_per_day' => 100,
// Rate Limits - Per-feature daily limits for guests and logged-in users
// Moderators (usergroup[cans][ms]) are exempt from rate limits
// Content indexing is NOT rate limited (admin-only operation)
'rate_limits' => [
'search' => [ 'guest' => 20, 'user' => 100 ],
'translation' => [ 'guest' => 10, 'user' => 50 ],
'summarization'=> [ 'guest' => 10, 'user' => 30 ],
'suggestions' => [ 'guest' => 20, 'user' => 100 ],
'chatbot' => [ 'guest' => 0, 'user' => 30 ], // Chatbot requires login, guest=0
'moderation' => [ 'guest' => 0, 'user' => 0 ], // Admin only, no public access
],
];
$this->_activity = [
'enabled_types' => [ 'wpforo_topic', 'wpforo_post', 'new_like', 'new_dislike', 'new_up_vote', 'new_down_vote', 'new_reaction', 'new_favorite', 'topic_solved', 'topic_closed', 'post_answer' ],
'items_per_page' => 20,
'default_period' => 'month',
'show_avatars' => true,
'show_excerpt' => true,
'excerpt_length' => 100,
'retention_days' => 365,
];
}
private function init_base() {
$this->general = wpforo_get_option( 'wpforo_general', $this->_general );
$this->members = wpforo_get_option( 'wpforo_members', $this->_members );
$this->profiles = wpforo_get_option( 'wpforo_profiles', $this->_profiles );
$this->rating = wpforo_get_option( 'wpforo_rating', $this->_rating );
$this->authorization = wpforo_get_option( 'wpforo_authorization', $this->_authorization );
$this->email = wpforo_get_option( 'wpforo_email', $this->_email );
$_antispam = $this->_antispam;
$_antispam['limited_file_ext'] = $_antispam['exclude_file_ext'] = [];
$this->antispam = wpforo_get_option( 'wpforo_antispam', $_antispam );
$this->akismet = wpforo_get_option( 'wpforo_akismet', $this->_akismet );
$this->recaptcha = wpforo_get_option( 'wpforo_recaptcha', $this->_recaptcha );
$this->buddypress = wpforo_get_option( 'wpforo_buddypress', $this->_buddypress );
$this->um = wpforo_get_option( 'wpforo_um', $this->_um );
$this->legal = wpforo_get_option( 'wpforo_legal', $this->_legal );
if( ( $this->profiles['profile'] === 'bp' && ! class_exists( 'BP_Component' ) ) || ( $this->profiles['profile'] === 'um' && ! function_exists( 'UM' ) ) ) {
$this->profiles['profile'] = 'default';
$this->profiles['default_cover'] = ( trim( (string) $this->profiles['default_cover'] ) ?: $this->_profiles['default_cover'] );
wpforo_update_option( 'wpforo_profiles', $this->profiles );
}
do_action( 'wpforo_settings_after_init_base', $this );
}
private function init() {
$this->board = wpforo_get_option( 'board', $this->_board );
$this->forums = wpforo_get_option( 'forums', $this->_forums );
$this->topics = wpforo_get_option( 'topics', $this->_topics );
$this->posting = wpforo_get_option( 'posting', $this->_posting );
$this->components = wpforo_get_option( 'components', $this->_components );
$this->tags = wpforo_get_option( 'tags', $this->_tags );
$this->subscriptions = wpforo_get_option( 'subscriptions', $this->_subscriptions );
$this->notifications = wpforo_get_option( 'notifications', $this->_notifications );
$this->activity = wpforo_get_option( 'activity', $this->_activity );
$this->logging = wpforo_get_option( 'logging', $this->_logging );
$this->seo = wpforo_get_option( 'seo', $this->_seo );
$this->rss = wpforo_get_option( 'rss', $this->_rss );
$this->social = wpforo_get_option( 'social', $this->_social );
$this->ai = wpforo_get_option( 'ai', $this->_ai );
$this->styles = wpforo_get_option( 'styles_' . WPF()->tpl->theme, $this->_styles );
if( ! $this->seo['seo_profile'] ) $this->seo['members_sitemap'] = false;
do_action( 'wpforo_settings_after_init', $this );
}
public function export( $groups = [] ) {
if( empty( $groups ) ) {
if( is_null( $this->info ) ) $this->init_info();
$groups = array_merge( array_keys( $this->info->core ), array_keys( $this->info->addons ) );
}
if( ! empty( $groups ) ) {
$settings = [];
foreach( $groups as $group ) {
if( ! empty( $this->$group ) ) {
$settings[ $group ] = $this->$group;
}
}
$json = wp_json_encode( $settings, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES );
header( 'Content-Type: application/json' );
header( 'Content-Disposition: attachment; filename="wpforo-settings-' . date( 'Y-m-d_H-i-s' ) . '.json"' );
header( 'Content-Length: ' . strlen( $json ) );
echo $json;
exit();
}
}
public function import( $json, $groups = null ) {
if( $json ) {
$settings = json_decode( $json, true );
if( is_array( $settings ) && ! empty( $settings ) ) {
if( is_null( $this->info ) ) $this->init_info();
foreach( $settings as $group => $setting ) {
if( ! is_null( $groups ) && ! in_array( $group, $groups, true ) ) continue;
if( wpfkey( $this->info->core, $group, 'base' ) ) {
$is_base = $this->info->core[ $group ]['base'];
} elseif( wpfkey( $this->info->addons, $group, 'base' ) ) {
$is_base = $this->info->addons[ $group ]['base'];
}
if( isset( $is_base ) ) {
$option_name = preg_replace( '#^wpforo_#iu', '', $group, 1 );
if( $option_name === 'profiles' && wpfval( $setting, 'default_cover' ) ) {
$setting['default_cover'] = preg_replace( '#^.*?/wp-content/uploads/wpforo/covers/#iu', WPF()->folders['covers']['url//'] . '/', $setting['default_cover'], 1 );
}
if( $is_base ) $option_name = 'wpforo_' . $option_name;
wpforo_update_option( $option_name, $setting, false );
}
}
}
}
}
}