blogid;
/* Blog-IDs */
$ids = self::_get_blog_ids();
/* Loopen */
foreach ($ids as $id) {
switch_to_blog($id);
self::_uninstall_backend();
}
/* Wechsel zurück */
switch_to_blog($old);
} else {
self::_uninstall_backend();
}
}
/**
* Deinstallation des Plugins bei MU & Network
*
* @since 1.0
* @change 1.0
*/
public static function uninstall_later($id)
{
/* Kein Netzwerk-Plugin */
if ( ! is_plugin_active_for_network(CACHIFY_BASE) ) {
return;
}
/* Wechsel */
switch_to_blog($id);
/* Installieren */
self::_uninstall_backend();
/* Wechsel zurück */
restore_current_blog();
}
/**
* Eigentliche Deinstallation des Plugins
*
* @since 1.0
* @change 1.0
*/
private static function _uninstall_backend()
{
/* Option */
delete_option('cachify');
/* Cache leeren */
self::flush_total_cache(true);
}
/**
* Rückgabe der IDs installierter Blogs
*
* @since 1.0
* @change 1.0
*
* @return array Blog-IDs
*/
private static function _get_blog_ids()
{
/* Global */
global $wpdb;
return $wpdb->get_col("SELECT blog_id FROM `$wpdb->blogs`");
}
/**
* Eigenschaften des Objekts
*
* @since 2.0
* @change 2.0.7
*/
private static function _set_default_vars()
{
/* Optionen */
self::$options = self::_get_options();
/* APC */
if ( self::$options['use_apc'] === self::METHOD_APC && Cachify_APC::is_available() ) {
self::$method = new Cachify_APC;
/* HDD */
} else if ( self::$options['use_apc'] === self::METHOD_HDD && Cachify_HDD::is_available() ) {
self::$method = new Cachify_HDD;
/* MEMCACHED */
} else if ( self::$options['use_apc'] === self::METHOD_MMC && Cachify_MEMCACHED::is_available() ) {
self::$method = new Cachify_MEMCACHED;
/* DB */
} else {
self::$method = new Cachify_DB;
}
}
/**
* Rückgabe der Optionen
*
* @since 2.0
* @change 2.1.2
*
* @return array $diff Array mit Werten
*/
private static function _get_options()
{
return wp_parse_args(
get_option('cachify'),
array(
'only_guests' => 1,
'compress_html' => self::MINIFY_DISABLED,
'cache_expires' => 12,
'without_ids' => '',
'without_agents' => '',
'use_apc' => self::METHOD_DB,
'reset_on_comment' => 0
)
);
}
/**
* Hinzufügen der Action-Links
*
* @since 1.0
* @change 2.1.9
*
* @param string $data Ursprungsinhalt der dynamischen robots.txt
* @return string $data Modifizierter Inhalt der robots.txt
*/
public static function robots_txt($data)
{
/* HDD only */
if ( self::$options['use_apc'] !== self::METHOD_HDD ) {
return $data;
}
/* Pfad */
$path = parse_url(site_url(), PHP_URL_PATH);
/* Ausgabe */
$data .= sprintf(
'%2$sDisallow: %1$s/wp-content/cache/cachify/%2$s',
( empty($path) ? '' : $path ),
PHP_EOL
);
return $data;
}
/**
* Hinzufügen der Action-Links
*
* @since 1.0
* @change 1.0
*
* @param array $data Bereits existente Links
* @return array $data Erweitertes Array mit Links
*/
public static function action_links($data)
{
/* Rechte? */
if ( ! current_user_can('manage_options') ) {
return $data;
}
return array_merge(
$data,
array(
sprintf(
'%s',
add_query_arg(
array(
'page' => 'cachify'
),
admin_url('options-general.php')
),
__( 'Settings', 'cachify' )
)
)
);
}
/**
* Meta-Links des Plugins
*
* @since 0.5
* @change 2.0.5
*
* @param array $input Bereits vorhandene Links
* @param string $page Aktuelle Seite
* @return array $data Modifizierte Links
*/
public static function row_meta($input, $page)
{
/* Rechte */
if ( $page != CACHIFY_BASE ) {
return $input;
}
return array_merge(
$input,
array(
'PayPal'
)
);
}
/**
* Anzeige des Spam-Counters auf dem Dashboard
*
* @since 2.0.0
* @change 2.2.2
*
* @param array $items Initial array with dashboard items
* @return array $items Merged array with dashboard items
*/
public static function add_dashboard_count( $items = array() )
{
/* Skip */
if ( ! current_user_can('manage_options') ) {
return $items;
}
/* Cache size */
$size = self::get_cache_size();
/* Caching method */
$method = call_user_func(
array(
self::$method,
'stringify_method'
)
);
/* Right now item */
$items[] = sprintf(
'%s Cache',
add_query_arg(
array(
'page' => 'cachify'
),
admin_url('options-general.php')
),
esc_attr(strtolower($method)),
esc_html__('Caching method', 'cachify'),
esc_attr($method),
( empty($size) ? esc_html__('Empty', 'cachify') : size_format($size) )
);
return $items;
}
/**
* Rückgabe der Cache-Größe
*
* @since 2.0.6
* @change 2.0.6
*
* @param integer $size Cache-Größe in Bytes
*/
public static function get_cache_size()
{
if ( ! $size = get_transient('cachify_cache_size') ) {
/* Auslesen */
$size = (int) call_user_func(
array(
self::$method,
'get_stats'
)
);
/* Speichern */
set_transient(
'cachify_cache_size',
$size,
60 * 15
);
}
return $size;
}
/**
* Hinzufügen eines Admin-Bar-Menüs
*
* @since 1.2
* @change 2.2.2
*
* @hook mixed cachify_user_can_flush_cache
*
* @param object Objekt mit Menü-Eigenschaften
*/
public static function add_flush_icon($wp_admin_bar)
{
/* Aussteigen */
if ( ! is_admin_bar_showing() OR ! apply_filters('cachify_user_can_flush_cache', current_user_can('manage_options')) ) {
return;
}
/* Display the admin icon anytime */
echo '';
/* Hinzufügen */
$wp_admin_bar->add_menu(
array(
'id' => 'cachify',
'href' => wp_nonce_url( add_query_arg('_cachify', 'flush'), '_cachify__flush_nonce'), // esc_url in /wp-includes/class-wp-admin-bar.php#L438
'parent' => 'top-secondary',
'title' => '',
'meta' => array( 'title' => esc_html__('Flush the cachify cache', 'cachify') )
)
);
}
/**
* Verarbeitung der Plugin-Meta-Aktionen
*
* @since 0.5
* @change 2.2.2
*
* @hook mixed cachify_user_can_flush_cache
*
* @param array $data Metadaten der Plugins
*/
public static function process_flush_request($data)
{
/* Skip if not a flush request */
if ( empty($_GET['_cachify']) OR $_GET['_cachify'] !== 'flush' ) {
return;
}
/* Check nonce */
if ( empty($_GET['_wpnonce']) OR ! wp_verify_nonce($_GET['_wpnonce'], '_cachify__flush_nonce') ) {
return;
}
/* Skip if not necessary */
if ( ! is_admin_bar_showing() OR ! apply_filters('cachify_user_can_flush_cache', current_user_can('manage_options')) ) {
return;
}
/* Load on demand */
if ( ! function_exists('is_plugin_active_for_network') ) {
require_once( ABSPATH. 'wp-admin/includes/plugin.php' );
}
/* Multisite & Network */
if ( is_multisite() && is_plugin_active_for_network(CACHIFY_BASE) ) {
/* Alter Blog */
$old = $GLOBALS['wpdb']->blogid;
/* Blog-IDs */
$ids = self::_get_blog_ids();
/* Loopen */
foreach ($ids as $id) {
switch_to_blog($id);
self::flush_total_cache();
}
/* Wechsel zurück */
switch_to_blog($old);
/* Notiz */
if ( is_admin() ) {
add_action(
'network_admin_notices',
array(
__CLASS__,
'flush_notice'
)
);
}
} else {
/* Leeren */
self::flush_total_cache();
/* Notiz */
if ( is_admin() ) {
add_action(
'admin_notices',
array(
__CLASS__,
'flush_notice'
)
);
}
}
if ( ! is_admin() ) {
wp_safe_redirect(
remove_query_arg(
'_cachify',
wp_get_referer()
)
);
exit();
}
}
/**
* Hinweis nach erfolgreichem Cache-Leeren
*
* @since 1.2
* @change 2.2.2
*
* @hook mixed cachify_user_can_flush_cache
*/
public static function flush_notice()
{
/* Kein Admin */
if ( ! is_admin_bar_showing() OR ! apply_filters('cachify_user_can_flush_cache', current_user_can('manage_options')) ) {
return false;
}
echo sprintf(
'
',
esc_html__('Cachify cache is flushed.', 'cachify')
);
}
/**
* Löschung des Cache beim Kommentar-Editieren
*
* @since 0.1.0
* @change 2.1.2
*
* @param integer $id ID des Kommentars
*/
public static function edit_comment($id)
{
if ( self::$options['reset_on_comment'] ) {
self::flush_total_cache();
} else {
self::remove_page_cache_by_post_id(
get_comment($id)->comment_post_ID
);
}
}
/**
* Löschung des Cache beim neuen Kommentar
*
* @since 0.1.0
* @change 2.1.2
*
* @param mixed $approved Kommentar-Status
* @param array $comment Array mit Eigenschaften
* @return mixed $approved Kommentar-Status
*/
public static function pre_comment($approved, $comment)
{
/* Approved comment? */
if ( $approved === 1 ) {
if ( self::$options['reset_on_comment'] ) {
self::flush_total_cache();
} else {
self::remove_page_cache_by_post_id( $comment['comment_post_ID'] );
}
}
return $approved;
}
/**
* Löschung des Cache beim Editieren der Kommentare
*
* @since 0.1
* @change 2.1.2
*
* @param string $new_status Neuer Status
* @param string $old_status Alter Status
* @param object $comment Array mit Eigenschaften
*/
public static function touch_comment($new_status, $old_status, $comment)
{
if ( $new_status != $old_status ) {
if ( self::$options['reset_on_comment'] ) {
self::flush_total_cache();
} else {
self::remove_page_cache_by_post_id( $comment->comment_post_ID );
}
}
}
/**
* Generierung von Publish-Hooks für Custom Post Types
*
* @since 2.1.7 Make the function public
* @since 2.0.3
*
* @param void
* @return void
*/
public static function register_publish_hooks()
{
/* Available post types */
$post_types = get_post_types(
array('public' => true)
);
/* Empty data? */
if ( empty($post_types) ) {
return;
}
/* Loop the post types */
foreach ( $post_types as $post_type ) {
add_action(
'publish_' .$post_type,
array(
__CLASS__,
'publish_post_types'
),
10,
2
);
add_action(
'publish_future_' .$post_type,
array(
__CLASS__,
'flush_total_cache'
)
);
}
}
/**
* Removes the post type cache on post updates
*
* @since 2.0.3
* @change 2.2.2
*
* @param integer $post_ID Post ID
*/
public static function publish_post_types($post_ID, $post)
{
/* No Post_ID? */
if ( empty($post_ID) OR empty($post) ) {
return;
}
/* Post status check */
if ( ! in_array( $post->post_status, array('publish', 'future') ) ) {
return;
}
/* Check for post var AND flush */
if ( ! isset($_POST['_cachify_remove_post_type_cache_on_update']) ) {
return self::flush_total_cache();
}
/* Check nonce */
if ( ! isset($_POST['_cachify__status_nonce_' .$post_ID]) OR ! wp_verify_nonce($_POST['_cachify__status_nonce_' .$post_ID], CACHIFY_BASE) ) {
return;
}
/* Check user role */
if ( ! current_user_can('publish_posts') ) {
return;
}
/* Save as var */
$remove_post_type_cache = (int)$_POST['_cachify_remove_post_type_cache_on_update'];
/* Save as user meta */
update_user_meta(
get_current_user_id(),
'_cachify_remove_post_type_cache_on_update',
$remove_post_type_cache
);
/* Remove cache OR flush */
if ( $remove_post_type_cache ) {
self::remove_page_cache_by_post_id( $post_ID );
} else {
self::flush_total_cache();
}
}
/**
* Removes a page (id) from cache
*
* @since 2.0.3
* @change 2.1.3
*
* @param integer $post_ID Post ID
*/
public static function remove_page_cache_by_post_id($post_ID)
{
/* Value check */
if ( ! $post_ID = (int)$post_ID ) {
return;
}
/* Remove page by url */
self::remove_page_cache_by_url(
get_permalink( $post_ID )
);
}
/**
* Removes a page url from cache
*
* @since 0.1
* @change 2.1.3
*
* @param string $url Page URL
*/
public static function remove_page_cache_by_url($url)
{
/* Value check */
if ( ! $url = (string)$url ) {
return;
}
call_user_func(
array(
self::$method,
'delete_item'
),
self::_cache_hash( $url ),
$url
);
}
/**
* Rückgabe der Cache-Gültigkeit
*
* @since 2.0.0
* @change 2.1.7
*
* @return intval Gültigkeit in Sekunden
*/
private static function _cache_expires()
{
return HOUR_IN_SECONDS * self::$options['cache_expires'];
}
/**
* Rückgabe des Cache-Hash-Wertes
*
* @since 0.1
* @change 2.0
*
* @param string $url URL für den Hash-Wert [optional]
* @return string Cachify-Hash-Wert
*/
private static function _cache_hash($url = '')
{
$prefix = is_ssl() ? 'https-' : '';
return md5(
empty($url) ? ( $prefix . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ) : ( $prefix . parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH) )
) . '.cachify';
}
/**
* Splittung nach Komma
*
* @since 0.9.1
* @change 1.0
*
* @param string $input Zu splittende Zeichenkette
* @return array Konvertierter Array
*/
private static function _preg_split($input)
{
return (array)preg_split('/,/', $input, -1, PREG_SPLIT_NO_EMPTY);
}
/**
* Prüfung auf Index
*
* @since 0.6
* @change 1.0
*
* @return boolean TRUE bei Index
*/
private static function _is_index()
{
return basename($_SERVER['SCRIPT_NAME']) != 'index.php';
}
/**
* Prüfung auf Mobile Devices
*
* @since 0.9.1
* @change 2.2.2
*
* @return boolean TRUE bei Mobile
*/
private static function _is_mobile()
{
return ( strpos(TEMPLATEPATH, 'wptouch') OR strpos(TEMPLATEPATH, 'carrington') OR strpos(TEMPLATEPATH, 'jetpack') OR strpos(TEMPLATEPATH, 'handheld') );
}
/**
* Prüfung auf eingeloggte und kommentierte Nutzer
*
* @since 2.0.0
* @change 2.0.5
*
* @return boolean $diff TRUE bei "vermerkten" Nutzern
*/
private static function _is_logged_in()
{
/* Eingeloggt */
if ( is_user_logged_in() ) {
return true;
}
/* Cookie? */
if ( empty($_COOKIE) ) {
return false;
}
/* Loopen */
foreach ( $_COOKIE as $k => $v) {
if ( preg_match('/^(wp-postpass|wordpress_logged_in|comment_author)_/', $k) ) {
return true;
}
}
}
/**
* Definition der Ausnahmen für den Cache
*
* @since 0.2
* @change 2.1.7
*
* @return boolean TRUE bei Ausnahmen
*
* @hook boolean cachify_skip_cache
*/
private static function _skip_cache()
{
/* No cache hook */
if ( apply_filters('cachify_skip_cache', false) ) {
return true;
}
/* Conditional Tags */
if ( self::_is_index() OR is_search() OR is_404() OR is_feed() OR is_trackback() OR is_robots() OR is_preview() OR post_password_required() ) {
return true;
}
/* WooCommerce usage */
if ( defined('DONOTCACHEPAGE') && DONOTCACHEPAGE ) {
return true;
}
/* Plugin options */
$options = self::$options;
/* Request vars */
if ( ! empty($_POST) OR ( ! empty($_GET) && get_option('permalink_structure') ) ) {
return true;
}
/* Logged in */
if ( $options['only_guests'] && self::_is_logged_in() ) {
return true;
}
/* Mobile request */
if ( self::_is_mobile() ) {
return true;
}
/* Post IDs */
if ( $options['without_ids'] && is_singular() ) {
if ( in_array( $GLOBALS['wp_query']->get_queried_object_id(), self::_preg_split($options['without_ids']) ) ) {
return true;
}
}
/* User Agents */
if ( $options['without_agents'] && isset($_SERVER['HTTP_USER_AGENT']) ) {
if ( array_filter( self::_preg_split($options['without_agents']), create_function('$a', 'return strpos($_SERVER["HTTP_USER_AGENT"], $a);') ) ) {
return true;
}
}
return false;
}
/**
* Minimierung des HTML-Codes
*
* @since 0.9.2
* @change 2.0.9
*
* @param string $data Zu minimierender Datensatz
* @return string $data Minimierter Datensatz
*
* @hook array cachify_minify_ignore_tags
*/
private static function _minify_cache($data)
{
/* Disabled? */
if ( ! self::$options['compress_html'] ) {
return $data;
}
/* Avoid slow rendering */
if ( strlen($data) > 700000) {
return $data;
}
/* Ignore this html tags */
$ignore_tags = (array)apply_filters(
'cachify_minify_ignore_tags',
array(
'textarea',
'pre'
)
);
/* Add the script tag */
if ( self::$options['compress_html'] !== self::MINIFY_HTML_JS ) {
$ignore_tags[] = 'script';
}
/* Empty blacklist? | TODO: Make it better */
if ( ! $ignore_tags ) {
return $data;
}
/* Convert to string */
$ignore_regex = implode('|', $ignore_tags);
/* Minify */
$cleaned = preg_replace(
array(
'//s',
'#(?ix)(?>[^\S ]\s*|\s{2,})(?=(?:(?:[^<]++|<(?!/?(?:' .$ignore_regex. ')\b))*+)(?:<(?>' .$ignore_regex. ')\b|\z))#'
),
array(
'',
' '
),
$data
);
/* Fault */
if ( strlen($cleaned) <= 1 ) {
return $data;
}
return $cleaned;
}
/**
* Zurücksetzen des kompletten Cache
*
* @since 0.1
* @change 2.0
*/
public static function flush_total_cache($clear_all_methods = false)
{
if ( $clear_all_methods ) {
/* DB */
Cachify_DB::clear_cache();
/* APC */
Cachify_APC::clear_cache();
/* HDD */
Cachify_HDD::clear_cache();
/* MEMCACHED */
Cachify_MEMCACHED::clear_cache();
} else {
call_user_func(
array(
self::$method,
'clear_cache'
)
);
}
/* Transient */
delete_transient('cachify_cache_size');
}
/**
* Zuweisung des Cache
*
* @since 0.1
* @change 2.0
*
* @param string $data Inhalt der Seite
* @return string $data Inhalt der Seite
*/
public static function set_cache($data)
{
/* Leer? */
if ( empty($data) ) {
return '';
}
/* Speicherung */
call_user_func(
array(
self::$method,
'store_item'
),
self::_cache_hash(),
self::_minify_cache($data),
self::_cache_expires()
);
return $data;
}
/**
* Verwaltung des Cache
*
* @since 0.1
* @change 2.0
*/
public static function manage_cache()
{
/* Kein Caching? */
if ( self::_skip_cache() ) {
return;
}
/* Daten im Cache */
$cache = call_user_func(
array(
self::$method,
'get_item'
),
self::_cache_hash()
);
/* Kein Cache? */
if ( empty($cache) ) {
ob_start('Cachify::set_cache');
return;
}
/* Cache verarbeiten */
call_user_func(
array(
self::$method,
'print_cache'
),
$cache
);
}
/**
* Einbindung von CSS
*
* @since 1.0
* @change 2.1.3
*/
public static function add_admin_resources($hook)
{
/* Hooks check */
if ( $hook !== 'index.php' AND $hook !== 'post.php' ) {
return;
}
/* Plugin data */
$plugin_data = get_plugin_data(CACHIFY_FILE);
/* Register css */
switch($hook) {
case 'index.php':
wp_enqueue_style(
'cachify-dashboard',
plugins_url('css/dashboard.min.css', CACHIFY_FILE),
array(),
$plugin_data['Version']
);
break;
case 'post.php':
wp_enqueue_script(
'cachify-post',
plugins_url('js/post.min.js', CACHIFY_FILE),
array('jquery'),
$plugin_data['Version'],
true
);
break;
default:
break;
}
}
/**
* Display a combo select on post publish box
*
* @since 2.1.3
* @change 2.2.2
*/
public static function print_flush_dropdown()
{
/* Post page only */
if ( empty($GLOBALS['pagenow']) OR $GLOBALS['pagenow'] !== 'post.php' ) {
return;
}
/* Published posts only */
if ( empty($GLOBALS['post']) OR ! is_object($GLOBALS['post']) OR $GLOBALS['post']->post_status !== 'publish' ) {
return;
}
/* Check user role */
if ( ! current_user_can('publish_posts') ) {
return;
}
/* Security */
wp_nonce_field(CACHIFY_BASE, '_cachify__status_nonce_' .$GLOBALS['post']->ID);
/* Already saved? */
$current_action = (int)get_user_meta(
get_current_user_id(),
'_cachify_remove_post_type_cache_on_update',
true
);
/* Init vars */
$dropdown_options = '';
$available_options = array(
esc_html__('Total cache', 'cachify'),
esc_html__('Page cache', 'cachify')
);
/* Select options */
foreach( $available_options as $key => $value ) {
$dropdown_options .= sprintf(
'',
$key,
$value,
selected($key, $current_action, false)
);
}
/* Output */
echo sprintf(
'',
esc_html__( 'Remove', 'cachify' ),
$available_options[$current_action],
esc_html__( 'Edit', 'cachify' ),
$dropdown_options,
esc_html__( 'OK', 'cachify' ),
esc_html__( 'Cancel', 'cachify' )
);
}
/**
* Einfügen der Optionsseite
*
* @since 1.0
* @change 2.2.2
*/
public static function add_page()
{
add_options_page(
__( 'Cachify', 'cachify' ),
__( 'Cachify', 'cachify' ),
'manage_options',
'cachify',
array(
__CLASS__,
'options_page'
)
);
}
/**
* Verfügbare Cache-Methoden
*
* @since 2.0.0
* @change 2.1.3
*
* @param array $methods Array mit verfügbaren Arten
*/
private static function _method_select()
{
/* Defaults */
$methods = array(
self::METHOD_DB => esc_html__('Database', 'cachify'),
self::METHOD_APC => 'APC',
self::METHOD_HDD => esc_html__('Hard disk', 'cachify'),
self::METHOD_MMC => 'Memcached'
);
/* APC */
if ( ! Cachify_APC::is_available() ) {
unset($methods[1]);
}
/* Memcached? */
if ( ! Cachify_MEMCACHED::is_available() ) {
unset($methods[3]);
}
/* HDD */
if ( ! Cachify_HDD::is_available() ) {
unset($methods[2]);
}
return $methods;
}
/**
* Minify cache dropdown
*
* @since 2.1.3
* @change 2.1.3
*
* @return array Key => value array
*/
private static function _minify_select()
{
return array(
self::MINIFY_DISABLED => esc_html__('No minify', 'cachify'),
self::MINIFY_HTML_ONLY => 'HTML',
self::MINIFY_HTML_JS => 'HTML + Inline JavaScript'
);
}
/**
* Register the language file
*
* @since 2.1.3
* @change 2.1.3
*/
public static function register_textdomain()
{
load_plugin_textdomain(
'cachify',
false,
CACHIFY_DIR . '/lang'
);
}
/**
* Registrierung der Settings
*
* @since 1.0
* @change 1.0
*/
public static function register_settings()
{
register_setting(
'cachify',
'cachify',
array(
__CLASS__,
'validate_options'
)
);
}
/**
* Validierung der Optionsseite
*
* @since 1.0.0
* @change 2.1.3
*
* @param array $data Array mit Formularwerten
* @return array Array mit geprüften Werten
*/
public static function validate_options($data)
{
/* Empty data? */
if ( empty($data) ) {
return;
}
/* Cache leeren */
self::flush_total_cache(true);
/* Hinweis */
if ( self::$options['use_apc'] != $data['use_apc'] && $data['use_apc'] >= self::METHOD_APC ) {
add_settings_error(
'cachify_method_tip',
'cachify_method_tip',
sprintf(
'%s [?]',
esc_html__('The server configuration file (e.g. .htaccess) needs to be adjusted', 'cachify')
),
'updated'
);
}
/* Rückgabe */
return array(
'only_guests' => (int)(!empty($data['only_guests'])),
'compress_html' => (int)$data['compress_html'],
'cache_expires' => (int)(@$data['cache_expires']),
'without_ids' => (string)sanitize_text_field(@$data['without_ids']),
'without_agents' => (string)sanitize_text_field(@$data['without_agents']),
'use_apc' => (int)$data['use_apc'],
'reset_on_comment' => (int)(!empty($data['reset_on_comment']))
);
}
/**
* Darstellung der Optionsseite
*
* @since 1.0
* @change 2.2.2
*/
public static function options_page()
{ ?>