Wordpress


Blog-System

Inhalt

empfehlenswerte Plugins

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;
 }
 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.

aktualisiert am 9.7.2023