Inhalt
empfehlenswerte Plugins
- Automatische Backups
- Kalender mit ICS-Import
- Lightbox Gallery
- Bilder beim Upload automatisch verkleinern
- Kontakt-Formular und Captcha
- Druck-Button für Beiträge
- Widgets nur auf bestimmten Seiten anzeigen
- Widget in Seite
- Upload-Einstellungen
- Peter’s Login Redirect
- Links prüfen
- Umfragen
- Cookie-Hinweis
- Übersicht Beiträge
- Slider
- Slider neueste Beiträge
- Login schützen
- Anhänge für Kommentare
- Nachrichtensystem
- User-CSV-Import
- LaTeX-Formelsatz
- Rechteverwaltung: 1 und 2
- Chat
- Suchen und Ersetzen
- Benutzer-Menüs
- Disable & Remove Google Fonts
- Draw Attention
- Easy WP SMTP
- Events Manager
- GDPR Cookie Compliance
- Statify und Statify – Extended Evaluation
- WP Post Expires
Childthemes
Um Anpassungen am Theme bei Themeupdates zu schützen sollte man am besten ein Childtheme anlegen.
Vorgehensweise:
neuen Ordner für das Childtheme in wp-content/themes anlegen (z.B. twentytwelve-child)
in dem neu angelegten Ordner die Datei style.css mit folgendem Inhalt anlegen:
/*
Theme Name: Child-Name
Description: Beschreibung
Author: DEIN NAME
Template: original-theme
Version: 1.0
*/
/* Eigene CSS-Eigenschaften ab hier einfügen */
Child-Theme aktivieren
Wenn man Änderungen an der Datei functions.php vornehmen möchte, so muss dies im Ordner des Child-Themes neu erstellt werden. Sie muss mit php-Tags umgeben werden:
<?php
add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_styles' );
function my_theme_enqueue_styles() {
wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
}
ebenso müssen andere php-Dateien, die verändert wurden, aus dem Ordner des Ursprungsthemes in den Ordner des Childthemes kopiert werden.
Anpassungen in der functions.php des Child-Themes
Suchfeld ins Menü einfügen
/* automatisch ein Suchfeld zum wp-nav-menu hinzufügen. */
add_filter('wp_nav_menu_items','add_search_box', 10, 2);
function add_search_box($items, $args) {
ob_start();
get_search_form();
$searchform = ob_get_contents();
ob_end_clean();
$items .= '. $searchform .';
return $items;
}
Website URL und E-Mail in Kommentaren entfernen
function wp_disable_comment_url($fields) {
unset($fields['url']);
return $fields;
}
add_filter('comment_form_default_fields','wp_disable_comment_url');
function wp_disable_comment_email($fields) {
unset($fields['email']);
return $fields;
}
add_filter('comment_form_default_fields','wp_disable_comment_email');
Filterung nach Autoren
function rudr_filter_by_the_author() {
$params = array(
'name' => 'author', // this is the "name" attribute for filter <select>
'show_option_all' => 'Alle Autoren' // label for all authors (display posts without filter)
);
if ( isset($_GET['user']) )
$params['selected'] = $_GET['user']; // choose selected user by $_GET variable
wp_dropdown_users( $params ); // print the ready author list
}
add_action('restrict_manage_posts', 'rudr_filter_by_the_author');
Abschalten, dass ein Benutzer ein E-Mail-Konto benötigt
add_action('user_profile_update_errors', 'my_user_profile_update_errors', 10, 3 );
function my_user_profile_update_errors($errors, $update, $user) {
$errors->remove('empty_email');
}
Erforderliche Felder bei der Nutzerregistrierung abschalten
add_action('user_new_form', 'my_user_new_form', 10, 1);
add_action('show_user_profile', 'my_user_new_form', 10, 1);
add_action('edit_user_profile', 'my_user_new_form', 10, 1);
function my_user_new_form($form_type) {
?>
<script type="text/javascript">
jQuery('#email').closest('tr').removeClass('form-required').find('.description').remove();
// Uncheck send new user email option by default
<?php if (isset($form_type) && $form_type === 'add-new-user') : ?>
jQuery('#send_user_notification').removeAttr('checked');
<?php endif; ?>
</script>
<?php
}
weitere Dateitypen zum Upload erlauben
add_filter('upload_mimes', 'custom_upload_mimes');
function custom_upload_mimes ( $existing_mimes=array() ) {
// add your extension to the mimes array as below
$existing_mimes['zip'] = 'application/zip';
$existing_mimes['gz'] = 'application/x-gzip';
$existing_mimes['htm'] = 'text/html';
$existing_mimes['html'] = 'text/html';
$existing_mimes['mp3'] = 'audio/mpeg';
$existing_mimes['mp4'] = 'audio/mp4';
return $existing_mimes;
}
Namensänderungen für User verbieten
function disable_display_name() {
global $pagenow;
if ( $pagenow == 'profile.php' ) {
?>
<script>
jQuery( document ).ready(function() {
jQuery('#first_name,#last_name,#nickname,#display_name').prop('disabled', 'disabled');
});
</script>
<?php
}
}
add_action( 'admin_head', 'disable_display_name', 15 );
Redirect nach Login für Benutzer
function my_login_redirect( $redirect_to, $request, $user ) {
//is there a user to check?
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
//check for admins
if ( in_array( 'administrator', $user->roles ) ) {
// redirect them to the default place
return $redirect_to;
} else {
return home_url();
}
} else {
return $redirect_to;
}
}
add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );
Dashboard-Widgets für User abschalten
function remove_dashboard_widgets() {
global $wp_meta_boxes;
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_drafts']);
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']);
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);
}
if (!current_user_can('manage_options')) {
add_action('wp_dashboard_setup', 'remove_dashboard_widgets' );
}
Last Login im Benutzermenü anzeigen
add_action( 'wp_login', 'myplugin_wp_login', 10, 2);
function myplugin_wp_login( $user_login, $user )
{
update_user_meta( $user->ID, 'last_login', current_time('mysql') );
}
add_filter( 'manage_users_columns', 'myplugin_manage_users_columns');
function myplugin_manage_users_columns( $columns )
{
$columns['last_login'] = __('zuletzt angemeldet', 'last_login');
return $columns;
}
add_filter('manage_users_custom_column', 'myplugin_manage_users_custom_column', 10, 3);
function myplugin_manage_users_custom_column( $value, $column_name, $user_id )
{
$user = get_userdata( $user_id );
if ( 'last_login' == $column_name && $user->last_login)
$value = date("d.m.y - G:i", strtotime( $user->last_login));
return $value;
}
Login Cookie Gültigkeit anpassen
function cr_auth_cookie_expiration( $expiration, $user_id, $remember ) {
if( $remember ) {
return 60*60*20; // 20 Stunden
}
return $expiration;
}
add_filter( 'auth_cookie_expiration', 'cr_auth_cookie_expiration', 10, 3 );
Autoren verbieten neue Schlagwörter zu erstellen
add_action( 'pre_insert_term', function($Term, $Taxonomy) {
return ($Taxonomy === 'post_tag')
? new WP_Error( 'term_addition_blocked', __( 'You are unauthorized to add new terms.' ) )
: $Term;
}, 0, 2 );
add_action( 'pre_insert_term', function($Term, $Taxonomy) {
return ($Taxonomy === 'post_category')
? new WP_Error( 'term_addition_blocked', __( 'You are unauthorized to add new terms.' ) )
: $Term;
}, 0, 2 );
Gutenberg-Editor Anpassung (alles außer Kategorien und Schlagwörten ausblenden)
function cc_gutenberg_register_files() {
// script file
wp_register_script(
'cc-block-script',
get_stylesheet_directory_uri() .'/js/block-script.js', // adjust the path to the JS file
array( 'wp-blocks', 'wp-edit-post' )
);
// register block editor script
register_block_type( 'cc/ma-block-files', array(
'editor_script' => 'cc-block-script'
) );
}
add_action( 'init', 'cc_gutenberg_register_files' );
Front End PM - Anpassungen
Buttons abschalten
add_filter( 'fep_menu_buttons', 'fep_cus_fep_menu_buttons', 99 );
function fep_cus_fep_menu_buttons( $menu )
{
unset( $menu['settings'] );
unset( $menu['announcements'] );
unset( $menu['directory'] );
return $menu;
}
erforderliche minimale Länge des Titels/des Textes abschalten
add_filter( 'fep_form_fields', function( $fields ) {
unset( $fields['message_title']['minlength'] );
return $fields;
});
add_filter( 'fep_form_fields', function( $fields ) {
unset( $fields['message_content']['minlength'] );
return $fields;
});
Mehrere Wordpress-Installationen in einer Datenbank
Man kann sehr einfach mehrere Wordpress-Installationen auch in nur einer Datenbank anlegen. Dazu muss lediglich jede Installation in ein eigenens Verzeichnis gemacht und die Datei wp-config.php angepasst werden.
- Wordpress herunterladen & entpacken
- aus der schon bestehenden Installation die Datei wp-config.php herunterladen und editieren: statt
$table_prefix = 'wp_';
schreibt man$table_prefix = 'wp2_';
- diese Datei dann in die neue Installation kopieren
- alle Dateien hochladen
- https://deinedomain/wp-admin/install.php aufrufen
Wordpress schützen
Login mit Plugin schützen
Limit login attemps installieren. Damit wird die Anzahl der fehlgeschlagenen Anmeldungen begrenzt.
Auslesen der Anmeldenamen
Verhindern, dass die Benutzernamen aus wp-json/wp/v2/users
ausgelesen werden können, indem man an die wp-config.php
folgendes anhängt:
remove_action('rest_api_init', 'create_initial_rest_routes', 99);
Schutz durch htpasswd
Einen zusätzlichen Schutz bietet das Anlegen eines extra Passworts mit mit der Datei .htpasswd.
Den verschlüsselten Passwortcode bekommt man hier: htaccess-Passwortschutz oder .htpasswd Generator .
Der erzeugte Code muss dann in die Datei .htpasswd kopiert und die Datei im gleichen Verzeichnis wie die .htaccess abgelegt werden.
Die .htaccess wird dann durch folgenden Zusatz ergänzt:
<Files wp-login.php>
AuthType Basic
AuthName "My Protected Area"
AuthUserFile /var/www/html/.htpasswd
Require valid-user
</Files>
Der entsprechende Pfad zu /var/www/html/
steht in Wordpress unter Dashboard/Werkzeuge/Website-Zustand/Bericht unter Verzeichnisse und Größen
Deaktivieren des Einloggens über die Datei xmlrpc.php
Eintrag in die .htaccess:
<Files xmlrpc.php>
order deny,allow
deny from all
</Files>
Externe Apps können dann aber nicht mehr auch Wordpress zugreifen.