mi-schi.com

15. Juni 2008

Template mit Passwort schützen

Abgelegt unter: Wordpress — Tags:, , , — admin @ 12:46

Ich war ja bei meiner Internetrecherche verwundert, warum sich noch niemand gefragt hat, wie man ein selbst erstelltes Wordpress Template mit einem Passwort schützen kann.

Templates in Wordpress sind was feines. Man hat einen eigenen PHP-Code und will den irgendwie auf seine Seite bekommen. Einfach ein Template erstellen:

1 <?php
2 /*
3 Template Name: hier-der-Template-Name
4 */
5 ?>
 

Dann speichern und in den verwendeten Theme-Ordner hochladen. Wenn man den Header, Footer, die Sidebar, sowie Kommentare auf der Templateseite mit anzeigen lassen will, kann man sich einfach mal den PHP-Code des Standardtemplates anschauen und ggf. kopieren. Unter Schreiben -> Seite -> Seiten-Template kann man dann sein eigenes Template auswählen und somit das eigene Script in das Wordpress-System eingliedern.

Soweit so gut, ist ja alles sehr einfach. Aber nun wollte ich ein Template mit dem Wordpress-Passwortschutz (bei Seite -> “Diese Seite mit einem Passwort versehen”) schützen. Das geht aber nicht so einfach, da man im Template ja erstmal herausbekommen muss, ob es ein Passwortschutz gibt, ob schon ein Cookie erstellt wurde und was sonst angezeigt werden soll (Loginformular).

Kurzerhand mal in die Wordpress-Funktion the_content() geschaut, die das für alle anderen Inhaltsausgaben (Artikel/Seiten) entscheidet und den Code kopiert und etwas angepasst:

 1 <?php
 2 /*
 3 Template Name: hier-der-Template-Name
 4 */
 5 ?>
 6 
 7 <?php get_header(); ?>
 8 <div id="content">
 9 <h2><?php the_title(); ?></h2>
10 <?php
11 function template_funktion() {
12 // hier der Code; PHP/HTML
13 }
14 $output = '';
15 if ( !empty($post->post_password) ) { // if there's a password
16     if ( !isset($_COOKIE['wp-postpass_'.COOKIEHASH]) ||
            stripslashes($_COOKIE['wp-postpass_'.COOKIEHASH])
            != $post->post_password ) {    // and it doesn't match the cookie
17         echo get_the_password_form();
18     } else {
19         template_funktion();
20     }
21 } else {
22     template_funktion();
23 }
24 ?>
25 </div><!-- End Content -->
26 <?php get_sidebar(); ?>
27 <?php get_footer(); ?>
 

Ich habe das Template mit einer Extra-Funktion (template_funktion()) erstellt, damit ich nur einmal meinen Code habe und ggf. auch nur einmal ändern muss. Man kann aber auch bei template_funktion(); zweimal den eigenen Code einfügen.

Mein Wordpress-Theme wird bei dem Code oben durch <?php get_header(); ?>, <?php get_sidebar(); ?>, <?php get_footer(); ?> mit angezeigt.

Powered by WordPress ( WordPress Deutschland )