Hier stelle ich dir verschiedene Codeschnipsel für die functions.php deines Templates vor.
Es gibt verschiedene Gründe bestimmte Funktionen von WordPress über die functions.php des Templates zu steuern oder auch zu erweitern. Folgende Codeschnipsel nutze ich selbst, da sie mir sinnvoll erscheinen.
CSS-Dateien für die Steuerung von Videos gezielt laden
Nicht jede einzelne Seite enthält ein Video und die CSS-Dateien für die Steuerelemente müssen nicht immer geladen werden. Das kommt der Seitenladegeschwindigkeit zugute.
Mit dem folgenden Codeschnipsel für die functions.php kannst du die Scripte auf den entsprechenden Seiten laden.
Ebenso kann man auf bestimmten Seiten eigene Javascript-Dateien laden lassen und auch hier eigene Javascript-Dateien registrieren, die immer geladen werden sollen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?php add_action( 'wp_enqueue_scripts', 'my_deregister_script', 100 ); function my_deregister_script() { //Mediaelementsteuerelemente entfernen wp_deregister_style( 'mediaelement' ); wp_deregister_style( 'wp-mediaelement' ); //Mediaelementsteuerelemente für die Seiten registrieren, die ein Video enthalten. if ( is_single(array(1631, 1841, 1852, 2076)) || is_page(array(37, 2350)) ) //Angabe der IDs { wp_register_style('mediaelement', '/wp-includes/js/mediaelement/mediaelementplayer.min.css',array(), false, 'all'); wp_enqueue_style('mediaelement'); wp_register_style('wp-mediaelement', '/wp-includes/js/mediaelement/wp-mediaelement.css',array(), false, 'all'); wp_enqueue_style('wp-mediaelement'); } //eigene Javascriptdateien registrieren wp_register_script( 'all4hardware', '/wp-content/themes/all4hardware4u/js/all4hardware.js', array(), false, true ); wp_enqueue_script( 'all4hardware' ); //eigene Javascriptdateien für bestimmte Seiten registrieren if ( is_page(array(547)) ) { wp_register_script( 'keyword-blur', '/wp-content/themes/all4hardware4u/keyworddichte/blur.js', array('jquery'), false, true ); wp_enqueue_script( 'keyword-blur' ); } if ( is_page(array(938)) ) { wp_register_script( 'vari-liste', '/wp-content/themes/all4hardware4u/js/vari.js', array('jquery'), false, true ); wp_enqueue_script( 'vari-liste' ); } if ( is_page(array(946)) ) { wp_register_script( 'ausblend-liste', '/wp-content/themes/all4hardware4u/js/ausblend.js', array('jquery'), false, true ); wp_enqueue_script( 'ausblend-liste' ); } if ( is_page(array(1132)) ) { wp_register_script( 'fest-menu-js', '/wp-content/themes/all4hardware4u/js/fest-menu.js', array('jquery'), false, true ); wp_enqueue_script( 'fest-menu-js' ); } //eigene CSS-Datei für bestimmte Seiten registrieren if ( is_page(array(1132)) ) { wp_register_style('fest-menu', '/wp-content/themes/all4hardware4u/style_coding.css',array(), false, 'all'); wp_enqueue_style('fest-menu'); } } ?> |
Zusätzliche Bildgrößen hinzufügen
Mit dem folgenden Code kannst du für die Mediathek zusätzliche Bildgrößen hinzufügen. Beim Upload werden diese zusätzlich erstellt und sind in der Mediathek beim Hinzufügen eines Bildes in einer Seite auswählbar und werden dann so in die Seite eingefügt. Ich habe eine weitere Bildgröße für Seiten mit voller Seitenbreite, sowie für den Slider auf der Startseite für die Desktopversion und die mobile Version meiner Seite.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php add_image_size( 'volle-seitenbreite', 780, 1200 ); add_filter( 'image_size_names_choose', 'my_custom_sizes' ); function my_custom_sizes( $sizes ) { return array_merge( $sizes, array( 'volle-seitenbreite' => __('Auf breiter Seite'), ) ); } add_image_size( 'slider-desktop', 780, 400 ); add_filter( 'image_size_names_choose', 'my_custom_sizes_slider_desktop' ); function my_custom_sizes_slider_desktop( $sizes ) { return array_merge( $sizes, array( 'slider-desktop' => __('Slider Desktop'), ) ); } add_image_size( 'slider-mobile', 340, 174 ); add_filter( 'image_size_names_choose', 'my_custom_sizes_slider_mobile' ); function my_custom_sizes_slider_mobile( $sizes ) { return array_merge( $sizes, array( 'slider-mobile' => __('Slider Mobile'), ) ); } ?> |
Versionsnummern von Javascript- und CSS-Dateien entfernen
Um ein wenig Quellcode einzusparen, kann man die Versionsnummern, welche per ?ver=
im HTML-Code eingefügt wurden, entfernen. Auch hier gilt, dass dadurch die Seitenladegeschwindigkeit verbessert wird.
1 2 3 4 5 6 7 8 9 | <?php function qb_wp_ver_css_js_entfernen( $src ) { if ( strpos( $src, '?ver=' ) ) $src = remove_query_arg( 'ver', $src ); return $src; } add_filter( 'style_loader_src', 'qb_wp_ver_css_js_entfernen', 9999 ); add_filter( 'script_loader_src', 'qb_wp_ver_css_js_entfernen', 9999 ); ?> |
Individuelle Loginseite für das WordPress-Backend
Mit dem folgenden Code kannst du deine WordPress-Loginseite ein wenig gestalten. Natürlich ist das nur eine Spielerei ;-)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php function mein_login_logo() { echo '<style type="text/css">.login h1 a{background-image:url('.get_template_directory_uri().'/images/logo21.png) !important;background-image:none,url('.get_template_directory_uri().'/images/logo21.png) !important;-webkit-background-size:278px 45px !important;background-size:278px 45px !important;background-position:center top;background-repeat:no-repeat;color:#999;height:45px !important;font-size:20px;font-weight:400;line-height:1.3em;margin:0 auto 25px;padding:0;text-decoration:none;width:278px !important;text-indent:-9999px;outline:0;overflow:hidden;display:block} </style>'; } add_action('login_head', 'mein_login_logo'); function change_wp_login_url() { echo esc_url( home_url() ); } function change_wp_login_title() { echo " - Powered by Harry's Labor"; } add_filter('login_headerurl', 'change_wp_login_url'); add_filter('login_headertitle', 'change_wp_login_title'); ?> |
Menüs im Backend für “Nicht-Admins” entfernen
Wenn jemand Zugang zu deinem Backend hat, zum Beispiel weil du ein Social-Login-Plugin für Kommentare nutzt, dann sollte dieser Nutzer natürlich keinen Zugriff auf bestimmte Funktionen im Backend haben und am besten gar nicht erst die Menüeinträge sehen. Um alle Menüeinträge außer für das Profil des Nutzers zu entfernen, kannst du folgenden Code in deine functions.php einfügen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php function remove_menus () { global $menu; $restricted = array(__('Dashboard'), __('jetpack'), __('Jetpack'), __('Subscribe2')); end ($menu); while (prev($menu)){ $value = explode(' ',$menu[key($menu)][0]); if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);} } if( class_exists( 'Jetpack' ) ) { remove_menu_page( 'jetpack' ); echo "\n" . '<style type="text/css" media="screen">#toplevel_page_jetpack { display: none; }</style>' . "\n"; } } if ( !current_user_can( 'manage_options' ) ) { add_action('admin_menu', 'remove_menus'); } ?> |
Adminbar entfernen
Ebenso “störend” kann die Adminbar oben im Frontend sein.
Um die Adminbar für “Nicht-Admins” im Frontend zu entfernen, kannst du folgende kurze Funktion verwenden:
1 2 3 4 5 6 7 8 | <?php add_action('after_setup_theme', 'remove_admin_bar'); function remove_admin_bar() { if (!current_user_can('administrator') && !is_admin()) { show_admin_bar(false); } } ?> |
Entfernen der Fehlerinformationen beim Login
Um es Hackern ein wenig schwerer zu machen, sollten diese natürlich keine Information darüber erhalten, welche Eingabe beim Login ins Backend falsch war. Mit diesem kurzen Codeschnipsel werden diese Informationen auf der Loginseite entfernt:
1 2 3 | <?php add_filter('login_errors',create_function('$a', "return null;")); ?> |
HTML5 Support deinem Template hinzufügen
Wenn du ein Template verwendest, welches noch nicht HTML5-fähig ist oder du ein eigenes programmiert hast, dann kannst du WordPress mit folgender Zeile in der functions.php mitteilen, dass das verwendete Template HTML5-Funktionen verwendet. Natürlich sollte dein Code im Template selbst auf HTML5 ausgelegt sein.
1 2 3 | <?php add_theme_support( 'html5', array( 'comment-list', 'comment-form', 'search-form', 'gallery', 'caption', 'widgets' ) ); ?> |
Kommentare auf Attachment-Seiten verhindern
Die Attachments wie Bilder und Videos können über eine eigene URL in WordPress aufgerufen werden. Wenn du die Kommentarfunktion in WordPress nutzt, könnten auch auf diesen Seiten Kommentare hinterlassen werden. Das macht natürlich meistens keinen Sinn. Du kannst mit diesem Code verhindern, dass Kommentare auf Attachment-Seiten hinterlassen werden können.
1 2 3 4 5 6 7 8 9 10 | <?php function filter_media_comment_status( $open, $post_id ) { $post = get_post( $post_id ); if( $post->post_type == 'attachment' ) { return false; } return $open; } add_filter( 'comments_open', 'filter_media_comment_status', 10 , 2 ); ?> |
Ping- und Trackbacks auf Attachmentseiten verhindern
Ebenso sollten auch Pingbacks und Trackbacks auf den Attachmentseiten deaktiviert werden:
1 2 3 4 5 6 7 8 9 10 | <?php function filter_media_pings_status( $open, $post_id ) { $post = get_post( $post_id ); if( $post->post_type == 'attachment' ) { return false; } return $open; } add_filter( 'pings_open', 'filter_media_pings_status', 10 , 2 ); ?> |
Emojis deaktivieren
In der aktuellen WordPress Version(ab 4.2) sind die neuen Emojis standardmäßig aktiviert. Aber nicht jeder will diese nutzen. WordPress selbst sieht keine Möglichkeit vor, diese zu deaktivieren. Die Scripte werden also immer geladen, egal ob sie gebraucht werden oder nicht. Hinzu kommt, dass diese Scripte im head
-Bereich der Seite geladen werden und nicht im Footer. Es sind jeweils für das Frontend und das Backend nur 2 Zeilen Code nötig, um das Laden der Scripte zu verhindern.
1 2 3 4 5 6 7 8 | <?php //Emoji im Frontend deaktivieren remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); //Emoji im Backend deaktivieren remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); remove_action( 'admin_print_styles', 'print_emoji_styles' ); ?> |
Title-Tag der Mediathek reaktivieren
Seit der WordPress Version 3.5 steht das Feld “Titel” in der Mediathek nicht mehr in Zusammenhang mit dem Title-Tag. Hier steht steht das Feld Title seit Version 3.5 nun für den EXIF-Titel des Bildes. Das Title-Tag kann man erst im visuellen Editor beim Bearbeiten des Bildes unter “erweiterte Optionen” bei dem Feld “Bildtitel-Attribut” eintragen. Da ich es gerne bequem habe und auf einen EXIF-Titel sehr gut verzichten kann, habe ich folgende Funktion in meine functions.php
des Templates eingefügt. Diese Funktion reaktiviert das Feld “Titel” in der Mediathek als title-tag und fügt dieses beim Bild nach <img ...
ein.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php function image_title_reaktivieren( $html_code, $id ) { $anhang = get_post($id); if (strpos($html_code, "title=")) { return $html_code; } else { $der_title = esc_attr($anhang->post_title); return str_replace('<img', '<img title="' . $der_title . '" ', $html_code); } } add_filter( 'media_send_to_editor', 'image_title_reaktivieren', 15, 2 ); function title_in_galerie_reaktivieren( $inhalt, $id ) { $vorschau_title = get_the_title($id); return str_replace('<a', '<a title="' . esc_attr($vorschau_title) . '" ', $inhalt); } add_filter('wp_get_attachment_link', 'title_in_galerie_reaktivieren', 10, 4); ?> |
Hast du noch weitere sinnvolle Erweiterungen für die functions.php? Dann schreibe mir oder kommentiere :-)