WordPress | t3n News News, Infos, Tipps und aktuelle Artikel zu WordPress 2014-04-17T05:18:12Z t3n Redaktion http://t3n.de/tag/wordpress WordPress 3.9 „Smith“ erschienen: Neue Version setzt voll auf Geschwindigkeit http://t3n.de/news/wordpress-3-9-erschienen-540643/ 2014-04-17T05:18:12Z
Die Blog-Software WordPress ist in Version 3.9 erschienen. Wir stellen euch die Highlights vor: unter anderem ein schnellerer Visual Editor mit einer Drag-&-Drop-Funktion für Bilder und die...

Die Blog-Software WordPress ist in Version 3.9 erschienen. Wir stellen euch die Highlights vor: unter anderem ein schnellerer Visual Editor mit einer Drag-&-Drop-Funktion für Bilder und die Möglichkeit, Text aus Word einzufügen.

WordPress 3.9: Die wichtigsten Neuerungen

Das Release 3.9 für die weit verbreitete Blog-Software steht ab sofort zum Download bereit. Benannt wurde die Version nach dem Jazz-Musiker Jimmy Smith. Die neue WordPress-Version soll vor allem Verbesserungen im Autoren-Bereich mit sich bringen: Das Verfassen von Blogposts soll wesentlich schneller funktionieren  als bisher. Der Visual Editor wurde verbessert, Bilder lassen sich auch ohne den „Dateien-einfügen“-Button einbauen und auch Microsoft Word wurden Manieren beigebracht: Texte aus dem Textverarbeitungsprogramm lassen sich jetzt ohne die üblichen, überflüssigen und nervenzerreibenden Formatierungsreste in einfügen.

Die neue WordPress-Version verspricht mehr Geschwindigkeit und auf den ersten Blick scheint sich dieses Versprechen zu bewahrheiten: Viele kleinere und größere Änderungen führen zu einer erhöhten Arbeitsgeschwindigkeit beim Erstellen von Artikeln – und zu einem größeren Komfort.

(Screenshot: WordPress)
WordPress 3.9: Immer schneller. (Screenshot: WordPress)

Visual Editor

WordPress verspricht einen schnelleren Editor mit leichterer Zugänglichkeit und einer verbesserten Darstellung auf mobilen Endgeräten. Zusätzlich können jetzt Texte aus Microsoft Word in den Editor kopiert werden, ohne hinterher aufwendig Formatierungsprobleme beseitigen zu müssen.

Bildbearbeitung

Die verschiedene Bildbearbeitungswerkzeuge in WordPress sind jetzt schneller erreichbar und können direkt beim Schreiben angewandt werden: Die Bilder können ab sofort schon im Editor skaliert oder zugeschnitten werden. Ein Schritt, der von Freunden der Bildbearbeitungsfunktionen sicher positiv aufgenommen wird – Bilder nach dem Einfügen in den Editor nochmals zu bearbeiten, ist bisher ziemlich umständlich gewesen.

Bilder per Drag & Drop einsetzen

Auch hier setzt WordPress auf Vereinfachung: Statt den umständlichen Weg über den „Dateien-hinzufügen“-Dialog zu wählen, können Bilder jetzt einfach per Drag & Drop direkt in den Editor gezogen werden. Ein weiterer Arbeitsschritt, der ab sofort beim Erstellen eines Artikels entfällt und die tägliche Arbeit mit dem WordPress-Editor angenehmer macht.

Galerie-Vorschau ab sofort im Editor sichtbar

Bisher ist bei einer eingesetzen Galerie im Editor nur ein nichtssagendes, graues Feld sichtbar: ein Platzhalter. Damit ist jetzt Schluss: Ab sofort ist der Inhalt der Galerie auch direkt sichtbar.

(Screenshot: WordPress)
WordPress 3.9: Auch die Galerie-Funktion ist jetzt 'sichtbar' in den Editor integriert. (Screenshot: WordPress)

Playlists für Musik und Videos

Eigene Musik- und Videodateien können jetzt in Playlists organisiert und eingebunden werden.

(Screenshot: WordPress)
Playlists halten Einzug in WordPress. (Screenshot: WordPress)

WordPress 3.9: Weitere Neuerungen in der Übersicht

  • Verbesserte Live-Vorschau im Theme-Customizer. Header-Bilder und Widgets können direkt in der Vorschau ausgewechselt werden. Verbesserter Theme-Browser.
  • Themes können jetzt HMTL5-Tags für Überschriften und Galerien nutzen.
  • Inline-Code-Dokumentation.
  • Verbesserte Datenbankabstraktionsschicht.
  • Externe Bibliotheken wurden aktualisiert.

Alle Änderungen in WordPress 3.9 in der Übersicht bekommt ihr wie immer im WordPress-Codex.

]]>
Jochen G. Fuchs
Social Locker: Mächtiges Plugin verspricht Webseiten mehr Reichweite in Sozialen Netzwerken http://t3n.de/news/social-locker-plugin-macht-deal-538021/ 2014-04-03T12:43:38Z
Social Locker ist ein WordPress-Plugin, das es auch als jQuery-Version gibt und mit dem ihr eure Nutzer per Social-Media-Aktion für bestimmte Inhalte bezahlen lassen könnt. Was damit genau möglich. ...

Social Locker ist ein WordPress-Plugin, das es auch als jQuery-Version gibt und mit dem ihr eure Nutzer per Social-Media-Aktion für bestimmte Inhalte bezahlen lassen könnt. Was damit genau möglich ist, stellen wir euch hier vor.

Gute Inhalte ja – aber nur gegen soziale Interaktion

Das Problem kennen bestimmt fast alle, die anderen Inhalte bereitstellen – sei es in einem Blog, Podcast oder mit kostenlosen Design-Ressourcen: Es wäre toll, wenn mehr Besucher und Nutzer die Beiträge und Ressourcen über die Social-Media-Buttons teilen würden. Social Locker bietet eine Möglichkeit, wie ihr das erreichen könnt.

Mit Social Locker könnt ihr bestimmte Inhalte nur zugänglich machen, wenn Besucher die Seite bei einem Sozialen Netzwerk verbreiten. Dabei geht es über das einfache „nach dem ersten Absatz ein Like für den weiteren Artikel“ hinaus. Ihr könnt ganz bequem auch nur einen Download-Link oder einen Link zu einer Demo sperren. Nach dem Download des Plugins könnt ihr es ganz normal über das WordPress-Backend installieren. Anschließend könnt ihr „Social Lockers“ anlegen.

So sieht Social Locker im Frontend aus. (Screenshot: eigene WordPress-Installation)
So sieht Social Locker im Frontend aus. (Screenshot: eigene WordPress-Installation)

Ihr könnt hierbei das Aussehen eures Lockers relativ individuell gestalten. Neben der Beschriftung des Lockers inklusive Beschriftung auf den Social-Media-Schaltflächen könnt ihr zwischen fünf Designs wählen. Wer etwas erfahrener ist, kann hier vermutlich auch relativ einfach noch weitere optische Anpassungen treffen. Anschließend müsst ihr natürlich festlegen, welche Social-Media-Kanäle ihr auf dem Locker angezeigt haben wollt: Ihr habt hier momentan die Wahl aus einem Tweet, einem +1 auf Google+, einem Like auf Facebook, einem Share auf Facebook, Google+ und LinkedIn sowie einem neuen Follower für Twitter. Hier könnt ihr unter anderem auch immer festlegen, ob eine andere URL als die der aktuellen Site gepostet werden soll.

Unter den weiteren Einstellungsmöglichkeiten ist unter anderem noch die Möglichkeit, ein Kreuz für das Lesen des weiteren Inhalts anzuzeigen, ohne dass der Nutzer einen Share oder Like abgeben muss. Den Inhalt, den ihr sperren möchtet, umschließt ihr dann einfach mit einem Shortcode. Bei dem „Default Locker“ ist das [sociallocker].

Ausreichend Möglichkeiten zur Individualisierung für Social Locker. (Screenshot: eigene WordPress-Installation)
Ausreichend Möglichkeiten zur Individualisierung für Social Locker. (Screenshot: eigene WordPress-Installation)

Social Locker: Nur mit Vorsicht zu genießen

An sich ist Social Locker eine tolle Möglichkeit, mehr Interaktion in den Sozialen Netzwerken zu erreichen. Allerdings solltet ihr bei der Lösung das Thema Datenschutz nicht aus dem Blick verlieren – denn die Einbindung der Social-Media-Schaltflächen ist so, wie sie standardmäßig von dem Plugin vorgenommen wird, in Deutschland nicht datenschutzkonform. Außerdem solltet ihr genau darauf achten, ob ihr wirklich einen Nutzen aus dem Plugin ziehen könnt – oder eher Nutzer abschreckt. Das Plugin einzusetzen, wenn ihr euch auf eurem Gebiet schon einen Namen gemacht habt und die Nutzer wissen, dass ihr qualitativ hochwertige Inhalte liefert, kann bestimmt funktionieren. Wenn ihr aber noch relativ wenig Leser habt, dann ist das vermutlich keine so gute Idee. Und ihr solltet mit so einer Lösung nie Inhalte verstecken, die nicht das halten, was ihr auf dem Social Locker ankündigt. Dann fühlt sich der Besucher ausgenutzt und kommt im schlimmsten Fall nie wieder vorbei.

Das WordPress-Plugin könnt ihr für sieben Tage kostenlos testen, anschließend kostet es 23 US-Dollar. Das jQuery-Plugin ist schon für 16 US-Dollar zu haben. Die Links zum Download findet ihr auf der offiziellen Website von Social Locker.

Was haltet ihr von dem Weg, so für eure Inhalte „bezahlen“ zu lassen? Kennt ihr vielleicht eine solche Lösung, die auch noch unbedenklich vom Datenschutz ist, weil sie die Social-Media-Schaltflächen vielleicht statisch einbindet?

]]>
Florian Brinkmann
WordPress auf dem Seziertisch: Welche Funktionen du kennen musst, um ein eigenes WordPress-Theme zu erstellen http://t3n.de/news/wordpress-theme-erstellen-twenty-fourteen-534579/ 2014-03-24T11:46:05Z
Für WordPress – das beliebteste CMS weltweit – gibt es tausende Themes. Wenn ihr aber etwas Individuelles haben und selbst ein WordPress-Theme erstellen wollt, müsst ihr euch mit den...

Für WordPress – das beliebteste CMS weltweit – gibt es tausende Themes. Wenn ihr aber etwas Individuelles haben und selbst ein WordPress-Theme erstellen wollt, müsst ihr euch mit den WordPress-Funktionen für Themes auseinandersetzen. Wir tun das in diesem Artikel für euch – am Beispiel von „Twenty Fourteen“.

Ein WordPress-Theme erstellen: HTML, CSS und ein bisschen PHP

Keine Frage: Es gibt für fast jeden Anwendungsfall ein passendes WordPress-Theme – meist sogar kostenlos. Aber wollen wir nicht alle etwas eigenes – etwas, was es so nur einmal im Web gibt? Deshalb kommen die meisten WordPress-Nutzer irgendwann an den Punkt, ein eigenes WordPress-Theme erstellen zu wollen. Und das ist gar nicht so schwer, wenn ihr HTML, CSS und ein bisschen PHP beherrscht.

Das einzige Hindernis sind dann noch die WordPress-Funktionen – und die schauen wir uns jetzt mal an.

Neu bei WordPress 3.8 dabei: Twenty Fourteen

Die Theme-Funktionen von ändern sich immer mal wieder geringfügig. Einige kommen hinzu, andere sollen nicht mehr genutzt werden. Überhaupt liegt es nahe, sich die Funktionen anhand eines aktuellen Themes anzuschauen. Die Wahl fällt auf Twenty Fourteen, das neueste Theme der WordPress-Entwickler. Auf die Funktionen, die Twenty-Fourteen-spezifisch sind, werde ich hier ebenfalls eingehen – ihr erkennt sie immer an dem Präfix twentyfourteen_. Wenn ihr noch weitere Informationen zu bestimmten Funktionen haben wollt, werdet ihr höchstwahrscheinlich in der Funktions-Referenz von WordPress.org fündig.

Schauen wir uns zuerst mal die Dateistruktur des Themes an. Auf den ersten Blick wirkt das jetzt sehr viel, aber einige Dateien sind sich vom Inhalt ziemlich ähnlich – andere wiederum haben kaum welchen. Wir werden die Dateien ungefähr so durchlaufen, wie sie im Blog genutzt oder angezeigt werden – wir beginnen also mit der header.php und enden mit der functions.php.

Die Ordnerstruktur des WordPress-Themes Twenty Fourteen. (Screenshot: eigene Installation)
Wer ein WordPress-Theme erstellen will, sollte die Ordnerstruktur von WordPress kennen. Hier am Beispiel von Twenty Fourteen. (Screenshot: eigene Installation)

Die header.php: Der Kopf des WordPress-Themes

Schauen wir uns also zuerst die header.php an.

<?php
/**
* The Header for our theme
*
* Displays all of the <head> section and everything up till <div id="main">
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
?><!DOCTYPE html>
<!--[if IE 7]>
<html class="ie ie7" <?php language_attributes(); ?>>
<![endif]-->
<!--[if IE 8]>
<html class="ie ie8" <?php language_attributes(); ?>>
<![endif]-->
<!--[if !(IE 7) | !(IE 8) ]><!-->
<html <?php language_attributes(); ?>>
<!--<![endif]-->
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width">
<title><?php wp_title( '|', true, 'right' ); ?></title>
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>">
<!--[if lt IE 9]>
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js"></script>
<![endif]-->
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<div id="page" class="hfeed site">
<?php if ( get_header_image() ) : ?>
<div id="site-header">
<a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home">
<img src="<?php header_image(); ?>" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="">
</a>
</div>
<?php endif; ?>
<header id="masthead" class="site-header" role="banner">
<div class="header-main">
<h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1>
<div class="search-toggle">
<a href="#search-container" class="screen-reader-text"><?php _e( 'Search', 'twentyfourteen' ); ?></a>
</div>
<nav id="primary-navigation" class="site-navigation primary-navigation" role="navigation">
<h1 class="menu-toggle"><?php _e( 'Primary Menu', 'twentyfourteen' ); ?></h1>
<a class="screen-reader-text skip-link" href="#content"><?php _e( 'Skip to content', 'twentyfourteen' ); ?></a>
<?php wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' ) ); ?>
</nav>
</div>
<div id="search-container" class="search-box-wrapper hide">
<div class="search-box">
<?php get_search_form(); ?>
</div>
</div>
</header><!-- #masthead -->
<div id="main" class="site-main">

Die WordPress-eigenen Funktionen sind hier:

bloginfo( 'charset' )
bloginfo( 'pingback_url' )
bloginfo( 'name' )
wp_title( '|', true, 'right' )
get_template_directory_uri()
wp_head()
body_class()
get_header_image()
header_image()
get_custom_header()->width
get_custom_header()->height
esc_url()
home_url( '/' )
wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' )
get_search_form()

Die Funktion bloginfo() liefert hier je nach übergebenem Parameter den Zeichensatz, die Pingback-URL oder den Namen des Blogs zurück. wp_title('|', true, 'right' ) gibt eigentlich zurück, was in der general-template.php steht. In diesem Fall ist aber in der functions.php eine Funktion twentyfourteen_wp_title() definiert, die die Funktion erweitert. Zurückgegeben wird der Name des Blogs, auf der Startseite zusätzlich die Beschreibung und auf anderen Seiten der Titel der jeweiligen Seite. Die Parameter sind (von links nach rechts) der Seperator, ob und wo der Titel angezeigt werden soll. Weitere Informationen zu dieser etwas komplexeren Funktion findet ihr im WordPress-Codex.

Die Funktion get_template_directory_uri() macht genau das, was sie sagt: Zurückgegeben wird der Pfad zum Theme. Mit wp_head() werden Plugin-Stylesheets, Javascript-Funktionen und anderes eingebunden, was für eure WordPress-Site wichtig ist. body_class() gibt – je nach aufgerufener Site – passende Klassen aus, mit denen ihr die verschiedenen Seitenarten stylen könnt. Auf der Startseite wird beispielsweise home ausgegeben, auf der Blog-Übersicht blog, im Single-View single und so fort. Praktischerweise wird auch – falls JavaScript aktiviert ist – die Klasse js ausgegeben.

get_header_image() gibt true oder false zurück, je nachdem, ob ein Header-Bild im Backend gewählt wurde oder nicht – mit header_imge wird dieses dann ausgegeben. Die Funktionen get_custom_header()->width und get_custom_header()->height sollten selbsterklärend sein. Mit esc_url() werden potenziell gefährliche Zeichen aus einer URL gefiltert, home_url() gibt den Link zur Homepage der Website zurück.

wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' ) ist mit all seinen Parametern nochmal eine etwas kompliziert wirkende Funktion. Grob gesagt wird – wie sich erahnen lässt – ein Menü ausgegeben. Um die Funktion genauer zu verstehen, werfen wir einen Blick in die functions.php. Hier stehen die folgenden Zeilen:

register_nav_menus( array(
'primary' => __( 'Top primary menu', 'twentyfourteen' ),
'secondary' => __( 'Secondary menu in left sidebar', 'twentyfourteen' ),
) );

Hier werden zwei Menüs angelegt, die dann im Backend unter „Design > Menüs“ zu erreichen sind. Vergeben wird mit primary beziehungsweise secondary die theme_location, die wir oben in dem Code-Schnipsel von wp_nav_menu() wiederfinden. Darüber hinaus wird der Name des Menüs vergeben, der im Backend angezeigt werden soll. Mit dem Parameter menu_class wird dem Menü eine Klasse zugewiesen. Weitere Informationen zu dieser Funktion und zu ihren weiteren Parametern gibt es hier.

Die Funktion get_search_form() gibt ein Suchformular zurück. Wenn keine search.php im Theme enthalten ist, wird das Standard-Formular zurückgegeben.

Ein WordPress-Theme erstellen: Die index.php

Widmen wir uns nun der index.php, die im Vergleich zur header.php etwas übersichtlicher ist:

<?php
/**
* The main template file
*
* This is the most generic template file in a WordPress theme and one
* of the two required files for a theme (the other being style.css).
* It is used to display a page when nothing more specific matches a query,
* e.g., it puts together the home page when no home.php file exists.
*
* @link http://codex.wordpress.org/Template_Hierarchy
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
get_header(); ?>
<div id="main-content" class="main-content">
<?php
if ( is_front_page() && twentyfourteen_has_featured_posts() ) {
// Include the featured content template.
get_template_part( 'featured-content' );
}
?>
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php
if ( have_posts() ) :
// Start the Loop.
while ( have_posts() ) : the_post();
/*
* Include the post format-specific template for the content. If you want to
* use this in a child theme, then include a file called called content-___.php
* (where ___ is the post format) and that will be used instead.
*/
get_template_part( 'content', get_post_format() );
endwhile;
// Previous/next post navigation.
twentyfourteen_paging_nav();
else :
// If no content, include the "No posts found" template.
get_template_part( 'content', 'none' );
endif;
?>
</div><!-- #content -->
</div><!-- #primary -->
<?php get_sidebar( 'content' ); ?>
</div><!-- #main-content -->
<?php
get_sidebar();
get_footer();

Hier alle neuen Funktionen im Überblick:

get_header()
is_front_page()
twentyfourteen_has_featured_posts()
get_template_part( 'featured-content' )
get_template_part( 'content', get_post_format() )
get_template_part( 'content', 'none' )
have_posts()
while ( have_posts() ) : the_post()
twentyfourteen_paging_nav()
get_sidebar( 'content' )
get_sidebar()
get_footer()

Die index.php ist nur ein Gerüst für die Inhalte, die mit Funktionen je nach Situation geladen werden. Mit der Funktion get_header() wird die header.php eingebunden. is_front_page() prüft, ob man sich gerade auf der Übersichtsseite des Blogs befindet. Die Funktion twentyfourteen_has_featured_posts() ist wieder eine Funktion aus der functions.php (immer gut zu erkennen an dem Namen des Themes als Präfix). Geprüft wird, ob es Featured Posts gibt. Jetzt werden verschiedene Teile des Templates eingelesen. get_template_part( 'featured-content' ) gibt den Inhalt der Datei featured-content.php zurück. Mit der Funktion get_template_part( 'content', get_post_format() ) wird – je nach Typ des Beitrags, also beispielsweise bei einer Galerie „gallery“ – die entsprechende content-[...].php zurückgegeben. get_post_format() gibt dementsprechend das Format des Artikels zurück. get_template_part( 'content', 'none' ) gibt dann – ihr habt es sicher schon geahnt – den Inhalt von content-none.php zurück.

Mit der Funktion have_posts() wird einfach geprüft, ob Artikel zum Anzeigen vorhanden sind. while ( have_posts() ) : the_post(); startet die Schleife, die nacheinander alle Beiträge durchläuft. Was ihr innerhalb dieser Schleife ausführt, wird bei jedem Post neu durchgeführt. Durch twentyfourteen_paging_nav() wird eine Navigation für ältere/neuere Posts angezeigt, get_sidebar( 'content' ) funktioniert ganz ähnlich wie get_template_part() und gibt den Inhalt der sidebar-content.php zurück. Äquivalent dazu wird mit get_sidebar() die sidebar.php zurückgegeben, mit get_footer() die footer.php.

Die content-Dateien bei WordPress

Da wir jetzt schon mit den content-Dateien zu tun hatten, gehen wir diese als nächstes durch. Sie ähneln sich zum Teil stark, da sie ja immer den Inhalt eines Beitrags ausgeben, nur für unterschiedliche Beitragstypen. Die Funktionen sind also bei allen content-Dateien nahezu die selben. Wenn der Artikel keinem bestimmten Post-Format zugeordnet wurde, wird die content.php aufgerufen, um den Inhalt darzustellen:

<?php
/**
* The default template for displaying content
*
* Used for both single and index/archive/search.
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php twentyfourteen_post_thumbnail(); ?>
<header class="entry-header">
<?php if ( in_array( 'category', get_object_taxonomies( get_post_type() ) ) && twentyfourteen_categorized_blog() ) : ?>
<div class="entry-meta">
<span class="cat-links"><?php echo get_the_category_list( _x( ', ', 'Used between list items, there is a space after the comma.', 'twentyfourteen' ) ); ?></span>
</div>
<?php
endif;
if ( is_single() ) :
the_title( '<h1 class="entry-title">', '</h1>' );
else :
the_title( '<h1 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h1>' );
endif;
?>
<div class="entry-meta">
<?php
if ( 'post' == get_post_type() )
twentyfourteen_posted_on();
if ( ! post_password_required() && ( comments_open() || get_comments_number() ) ) :
?>
<span class="comments-link"><?php comments_popup_link( __( 'Leave a comment', 'twentyfourteen' ), __( '1 Comment', 'twentyfourteen' ), __( '% Comments', 'twentyfourteen' ) ); ?></span>
<?php
endif;
edit_post_link( __( 'Edit', 'twentyfourteen' ), '<span class="edit-link">', '</span>' );
?>
</div><!-- .entry-meta -->
</header><!-- .entry-header -->
<?php if ( is_search() ) : ?>
<div class="entry-summary">
<?php the_excerpt(); ?>
</div><!-- .entry-summary -->
<?php else : ?>
<div class="entry-content">
<?php
the_content( __( 'Continue reading <span class="meta-nav">→</span>', 'twentyfourteen' ) );
wp_link_pages( array(
'before' => '<div class="page-links"><span class="page-links-title">' . __( 'Pages:', 'twentyfourteen' ) . '</span>',
'after' => '</div>',
'link_before' => '<span>',
'link_after' => '</span>',
) );
?>
</div><!-- .entry-content -->
<?php endif; ?>
<?php the_tags( '<footer class="entry-meta"><span class="tag-links">', '', '</span></footer>' ); ?>
</article><!-- #post-## -->

Neu sind die folgenden Funktionen:

the_ID()
post_class()
twentyfourteen_post_thumbnail()
get_object_taxonomies()
get_post_type()
twentyfourteen_categorized_blog()
get_the_category_list( _x( ', ', 'Used between list items, there is a space after the comma.', 'twentyfourteen' ) )
is_single()
the_title( '<h1 class="entry-title">', '</h1>' )
get_permalink()
twentyfourteen_posted_on()
post_password_required()
comments_open()
get_comments_number()
comments_popup_link( __( 'Leave a comment', 'twentyfourteen' ), __( '1 Comment', 'twentyfourteen' ), __( '% Comments', 'twentyfourteen' ) )
edit_post_link( __( 'Edit', 'twentyfourteen' ), '', '' )
is_search()
the_excerpt()
the_content( __( 'Continue reading <span class="meta-nav">→</span>', 'twentyfourteen' ) )
wp_link_pages( array(
'before' => '<div class="page-links"><span class="page-links-title">' . __( 'Pages:', 'twentyfourteen' ) . '',
'after' => '</div>',
'link_before' => '<span>',
'link_after' => '</span>',
) )
the_tags( '<footer class="entry-meta"><span class="tag-links">', '', '</span></footer>' )

Mit the_ID() wird die ID des Beitrags zurückgegeben. post_class() gibt Klassen zurück, die zu dem Beitrag passen, beispielsweise die Klasse post, wenn es eine Galerie ist format-gallery und so weiter. twentyfourteen_post_thumbnail() gibt das Featured-Image des Beitrags zurück, durch get_object_taxonomies() werden alle Taxonomien eines Posts zurückgegeben. get_post_type gibt den Typ des Posts zurück. Die Funktion twentyfourteen_categorized_blog() prüft, ob das Blog mehr als eine Kategorie hat. Die Funktion get_the_category_list() sieht wegen der Parameter auf den ersten Blick schlimmer aus als sie ist: Der erste Parameter ist das Trennzeichen zwischen den Kategorien. Anschließend kommen Hinweise für Übersetzer und am Ende der Name des Themes. Auch das ist für die Übersetzung relevant.

Mit is_single() wird geprüft, ob wir uns im Single-View befinden, the_title gibt den Titel des Beitrags aus, als Parameter kann angegeben werde, was direkt davor und dahinter ausgegeben werden soll. get_permalink() gibt den Link zu dem Beitrag zurück, mit twentyfourteen_posted_on() werden Meta-Informationen wie etwa der Autor zurückgegeben. Wenn der Beitrag mit einem Passwort geschützt ist, gibt post_password_required() true zurück. comments_open() prüft, ob Kommentare erlaubt sind und get_comments_number() gibt true zurück, falls Kommentare hinterlassen wurden. Mit comments_popup_link() wird der Link zu den Kommentaren zurückgegeben, drei Parameter sind möglich: Das erste ist der Text, der ausgegeben wird, wenn kein Kommentar vorhanden ist. Zweiterer wird bei einem Kommentar angezeigt, letzterer bei mehr als einem Kommentar. edit_post_link() gibt den Link zum Bearbeiten des Beitrags aus, mit is_search() wird geprüft, ob es sich um eine Suchergebnis-Seite handelt. the_excerpt() gibt eine bestimmte Anzahl Zeichen als Teaser aus, anschließend wird der Text abgeschnitten.

Die Funktion the_content() gibt den Inhalt des Beitrags zurück. Wenn es sich um eine Übersichtsseite handelt, wird der Inhalt bis zum more-Tag (falls gesetzt) angezeigt, gefolgt von einem Link mit dem Text in runden Klammern. Mit wp_link_pages() werden Seitenzahlen für Beiträge mit mehr als einer Seite ausgegeben. Die Parameter sollten selbst erklärend sein. Mit the_tags() wird eine Liste der Tags ausgegeben, die Parameter bestimmen den Teil vor der Ausgabe, den Seperator zwischen den Tags und die Ausgabe danach.

Damit hätten wir die meisten Funktionen aus den content-Dateien abgearbeitet. Die Dateien content-aside.php, content-audio.php, content-gallery.php, content-image.php, content-link.php, content-quote.php und content-video.php sind sehr ähnlich aufgebaut. Im Vergleich zur content.php kommen nur zwei Funktionen dazu, mit entsprechenden Parametern:

get_post_format_link('audio')
get_post_format_string('audio')

Diese beiden Funktionen machen genau das, wonach sie klingen: Einmal wird der Link zu einer Archiv-Seite des in Klammern stehenden Post-Formats zurückgegeben, mit get_post_format_string() wird der Slug/die Bezeichnung zurückgegeben. In der content-featured-post.php, der content-none.php und der featured-content.php gibt es noch ein paar weitere Funktionen:

/* content-featured-post.php */
has_post_thumbnail()
get_theme_mod( 'featured_content_layout' )
the_post_thumbnail( 'twentyfourteen-full-width' )
/* content-none.php */
current_user_can( 'publish_posts' )
admin_url( 'post-new.php' )
/* featured-content.php */
twentyfourteen_get_featured_posts()
setup_postdata()
wp_reset_postdata()

Mit has_post_thumbnail() wird geprüft, ob ein Artikelbild festgelegt ist. Mit get_theme_mod() wird geprüft, welches Layout im Theme-Customizer gewählt wurde. current_user_can() gibt zurück, was für Rechte der Besucher gerade hat, mit admin_url() wird eine URL für das Backend erzeugt, hier für einen neuen Beitrag. twentyfourteen_get_featured_posts() liefert die Featured-Posts zurück, mit Hilfe von setup_postdata() werden globale Variablen gefüllt – wp_reset_postdata()setzt diese Variablen wieder zurück.

Weitere Übersichtsseiten: archive.php und author.php

Mit den content-[...].php-Dateien sind wir mit den Übersichtsseiten jetzt fast fertig. Es fehlen noch die archive.php und author.php – schauen wir uns zuerst den interessanten Teil der archive.php an:

<?php
/**
* The template for displaying Archive pages
*
* Used to display archive-type pages if nothing more specific matches a query.
* For example, puts together date-based pages if no date.php file exists.
*
* If you'd like to further customize these archive views, you may create a
* new template file for each specific one. For example, Twenty Fourteen
* already has tag.php for Tag archives, category.php for Category archives,
* and author.php for Author archives.
*
* @link http://codex.wordpress.org/Template_Hierarchy
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
get_header(); ?>
<section id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php if ( have_posts() ) : ?>
<header class="page-header">
<h1 class="page-title">
<?php
if ( is_day() ) :
printf( __( 'Daily Archives: %s', 'twentyfourteen' ), get_the_date() );
elseif ( is_month() ) :
printf( __( 'Monthly Archives: %s', 'twentyfourteen' ), get_the_date( _x( 'F Y', 'monthly archives date format', 'twentyfourteen' ) ) );
elseif ( is_year() ) :
printf( __( 'Yearly Archives: %s', 'twentyfourteen' ), get_the_date( _x( 'Y', 'yearly archives date format', 'twentyfourteen' ) ) );
else :
_e( 'Archives', 'twentyfourteen' );
endif;
?>
</h1>
</header><!-- .page-header -->

Besonders viele neue Funktionen gibt es nicht, aber doch ein paar:

is_day()
is_month()
is_year()
get_the_date()

Eigentlich sollten die alle selbsterklärend sein. Die ersten drei prüfen, ob gerade ein Tagesarchiv, ein Monats- oder ein Jahresarchiv angezeigt wird. get_the_date() gibt die jeweilige Zeitangabe zurück.

Auch bei der author.php können wir uns auf den Anfang beschränken:

<?php
/**
* The template for displaying Author archive pages
*
* @link http://codex.wordpress.org/Template_Hierarchy
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
get_header(); ?>
<section id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php if ( have_posts() ) : ?>
<header class="archive-header">
<h1 class="archive-title">
<?php
/*
* Queue the first post, that way we know what author
* we're dealing with (if that is the case).
*
* We reset this later so we can run the loop properly
* with a call to rewind_posts().
*/
the_post();
printf( __( 'All posts by %s', 'twentyfourteen' ), get_the_author() );
?>
</h1>
<?php if ( get_the_author_meta( 'description' ) ) : ?>
<div class="author-description"><?php the_author_meta( 'description' ); ?></div>
<?php endif; ?>
</header><!-- .archive-header -->
<?php
/*
* Since we called the_post() above, we need to rewind
* the loop back to the beginning that way we can run
* the loop properly, in full.
*/
rewind_posts();

Neue Funktionen sind:

get_the_author()
get_the_author_meta( 'description' )
the_author_meta( 'description' )
rewind_posts()

get_the_author() gibt den Namen des Autors zurück. Mit get_the_author_meta() kann geprüft werden, ob ein Autorenfeld ausgefüllt ist – hier die Autoren-Beschreibung. Zurückgegeben wird sie mittels the_author_meta().Mit rewind_posts wird wieder an die erste Position der Schleife gesprungen.

Machen wir weiter mit dem für uns interessanten Abschnitt der single.php:

if ( comments_open() || get_comments_number() ) {
comments_template();
}

Neu ist hier nur die Funktion comments_template(), mit der die comments.php zurückgegeben wird. Und in eben dieser comments.php gibt es wieder ein paar mehr neue Funktionen:

<?php
/**
* The template for displaying Comments
*
* The area of the page that contains comments and the comment form.
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
/*
* If the current post is protected by a password and the visitor has not yet
* entered the password we will return early without loading the comments.
*/
if ( post_password_required() ) {
return;
}
?>
<div id="comments" class="comments-area">
<?php if ( have_comments() ) : ?>
<h2 class="comments-title">
<?php
printf( _n( 'One thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'twentyfourteen' ),
number_format_i18n( get_comments_number() ), get_the_title() );
?>
</h2>
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : ?>
<nav id="comment-nav-above" class="navigation comment-navigation" role="navigation">
<h1 class="screen-reader-text"><?php _e( 'Comment navigation', 'twentyfourteen' ); ?></h1>
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'twentyfourteen' ) ); ?></div>
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'twentyfourteen' ) ); ?></div>
</nav><!-- #comment-nav-above -->
<?php endif; // Check for comment navigation. ?>
<ol class="comment-list">
<?php
wp_list_comments( array(
'style' => 'ol',
'short_ping' => true,
'avatar_size'=> 34,
) );
?>
</ol><!-- .comment-list -->
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : ?>
<nav id="comment-nav-below" class="navigation comment-navigation" role="navigation">
<h1 class="screen-reader-text"><?php _e( 'Comment navigation', 'twentyfourteen' ); ?></h1>
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'twentyfourteen' ) ); ?></div>
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'twentyfourteen' ) ); ?></div>
</nav><!-- #comment-nav-below -->
<?php endif; // Check for comment navigation. ?>
<?php if ( ! comments_open() ) : ?>
<p class="no-comments"><?php _e( 'Comments are closed.', 'twentyfourteen' ); ?></p>
<?php endif; ?>
<?php endif; // have_comments() ?>
<?php comment_form(); ?>
</div><!-- #comments -->

Hier sind die neuen Funktionen auf einen Blick:

have_comments()
get_comments_number()
get_comment_pages_count()
get_option( 'page_comments' )
previous_comments_link( __( '← Older Comments', 'twentyfourteen' ) )
next_comments_link( __( 'Newer Comments →', 'twentyfourteen' ) )
wp_list_comments( array(
'style' => 'ol',
'short_ping' => true,
'avatar_size'=> 34,) )
comment_form()

Mit have_comments() wird zurückgegeben, ob Kommentare vorhanden sind oder nicht. get_comments_number() liefert die Anzahl der Kommentare zurück, get_comment_pages_count() die Anzahl der Kommentar-Seiten. get_option( 'page_comments' ) prüft, ob im Backend die Option aktiviert ist, dass Kommentare ab einer bestimmten Anzahl auf mehrere Seiten aufgeteilt werden sollen. previous_comments_link() und next_comments_links() ist wieder selbsterklärend. Mit wp_list_comments() gebt ihr die Kommentare aus. Der Parameter style kan ol, ul oder div sein – short_ping gibt die Möglichkeit zu entscheiden, ob Ping- und Trackbacks kurz dargestellt werden sollen. Genauere Informationen und mehr Parameter findet ihr wieder im Codex.

WordPress-Funktionen: Die category.php

Wenden wir uns nun der category.php zu, von der wieder nur der erste Teil spannend ist:

<?php
/**
* The template for displaying Category pages
*
* @link http://codex.wordpress.org/Template_Hierarchy
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
get_header(); ?>
<section id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php if ( have_posts() ) : ?>
<header class="archive-header">
<h1 class="archive-title"><?php printf( __( 'Category Archives: %s', 'twentyfourteen' ), single_cat_title( '', false ) ); ?></h1>
<?php
// Show an optional term description.
$term_description = term_description();
if ( ! empty( $term_description ) ) :
printf( '<div class="taxonomy-description">%s</div>', $term_description );
endif;
?>
</header><!-- .archive-header -->

Noch nicht behandelt haben wir die folgenden Funktionen:

single_cat_title( '', false )
term_description()

single_cat_title() liefert den Titel der Kategorie, term_description() die optionale Beschreibung. Für die tag-Seite gibt es äquivalent die Funktion single_tag_title(). Jetzt schauen wir uns die image.php an:

<?php
/**
* The template for displaying image attachments
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
// Retrieve attachment metadata.
$metadata = wp_get_attachment_metadata();
get_header();
?>
<section id="primary" class="content-area image-attachment">
<div id="content" class="site-content" role="main">
<?php
// Start the Loop.
while ( have_posts() ) : the_post();
?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="entry-header">
<?php the_title( '<h1 class="entry-title">', '</h1>' ); ?>
<div class="entry-meta">
<span class="entry-date"><time class="entry-date" datetime="<?php echo esc_attr( get_the_date( 'c' ) ); ?>"><?php echo esc_html( get_the_date() ); ?></time></span>
<span class="full-size-link"><a href="<?php echo wp_get_attachment_url(); ?>"><?php echo $metadata['width']; ?> × <?php echo $metadata['height']; ?></a></span>
<span class="parent-post-link"><a href="<?php echo get_permalink( $post->post_parent ); ?>" rel="gallery"><?php echo get_the_title( $post->post_parent ); ?></a></span>
<?php edit_post_link( __( 'Edit', 'twentyfourteen' ), '<span class="edit-link">', '</span>' ); ?>
</div><!-- .entry-meta -->
</header><!-- .entry-header -->
<div class="entry-content">
<div class="entry-attachment">
<div class="attachment">
<?php twentyfourteen_the_attached_image(); ?>
</div><!-- .attachment -->

Neu ist hier folgendes:

wp_get_attachment_metadata()
wp_get_attachment_url()
$metadata['width']
$metadata['height']
twentyfourteen_the_attached_image()

Mit wp_get_attachment_metadata() werden die Metadaten der Datei zurückgegeben. $metadata['width'] und $metadata['height'] sind selbsterklärend, twentyfourteen_the_attached_image() gibt das Bild zurück.

In der search.php ist nur eine Funktion vorhanden, die wir noch nicht hatten:

get_search_query()

Diese Funktion gibt einfach die Such-Anfrage zurück. In der sidebar.php gibt es noch weitere neue Funktionen:

<?php
/**
* The Sidebar containing the main widget area
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
?>
<div id="secondary">
<?php
$description = get_bloginfo( 'description', 'display' );
if ( ! empty ( $description ) ) :
?>
<h2 class="site-description"><?php echo esc_html( $description ); ?></h2>
<?php endif; ?>
<?php if ( has_nav_menu( 'secondary' ) ) : ?>
<nav role="navigation" class="navigation site-navigation secondary-navigation">
<?php wp_nav_menu( array( 'theme_location' => 'secondary' ) ); ?>
</nav>
<?php endif; ?>
<?php if ( is_active_sidebar( 'sidebar-1' ) ) : ?>
<div id="primary-sidebar" class="primary-sidebar widget-area" role="complementary">
<?php dynamic_sidebar( 'sidebar-1' ); ?>
</div><!-- #primary-sidebar -->
<?php endif; ?>
</div><!-- #secondary -->

Neu ist:

has_nav_menu( 'secondary' )
is_active_sidebar( 'sidebar-1' )
dynamic_sidebar( 'sidebar-1' )

has_nav_menu() prüft, ob das Menü einen Eintrag hat, oder nicht. is_active_sidebar() macht ähnliches für Sidebars, dynamic_sidebar() gibt eine Sidebar, oder besser einen Widget-Bereich, aus. Die verschiedenen Widget-Bereiche werden wieder in der functions.php definiert, das sieht für die primäre Sidebar so aus:

register_sidebar( array(
'name' => __( 'Primary Sidebar', 'twentyfourteen' ),
'id' => 'sidebar-1',
'description' => __( 'Main sidebar that appears on the left.', 'twentyfourteen' ),
'before_widget' => '

', 'after_widget' => '', 'before_title' => '

', 'after_title' => '

', ) );

Hier wird eine Sidebar mit dem Namen „Primary Sidebar“ angelegt, bekommt die id „sidebar-1“, eine Beschreibung, wird von einem aside-Tag umschlossen und der Titel wird als h1-Überschrift ausgezeichnet. In der taxonomy-post_format.php gibt es nur eine neue Funktion: is_tax. Widmen wir uns nun vor der funcions.php noch kurz der footer.php:

<?php
/**
* The template for displaying the footer
*
* Contains footer content and the closing of the #main and #page div elements.
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
?>
</div><!-- #main -->
<footer id="colophon" class="site-footer" role="contentinfo">
<?php get_sidebar( 'footer' ); ?>
<div class="site-info">
<?php do_action( 'twentyfourteen_credits' ); ?>
<a href="<?php echo esc_url( __( 'http://wordpress.org/', 'twentyfourteen' ) ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentyfourteen' ), 'WordPress' ); ?></a>
</div><!-- .site-info -->
</footer><!-- #colophon -->
</div><!-- #page -->
<?php wp_footer(); ?>
</body>
</html>

Neu ist hier nur die Funktion wp_footer(), die ähnlich wie wp_header() arbeitet und Dinge einbindet, die für das Funktionieren einer Seite wichtig sind. Jetzt wird es noch mal spannend: Die functions.php – sie werde ich abschnittweise, also Funktion für Funktion, durchlaufen, aber auch die Inhalte der Funktionen erläutern. Funktionen, die nur eine Relevanz für Twenty Fourteen haben, werde ich gegebenenfalls auslassen.

<?php
/**
* Twenty Fourteen functions and definitions
*
* Set up the theme and provides some helper functions, which are used in the
* theme as custom template tags. Others are attached to action and filter
* hooks in WordPress to change core functionality.
*
* When using a child theme you can override certain functions (those wrapped
* in a function_exists() call) by defining them first in your child theme's
* functions.php file. The child theme's functions.php file is included before
* the parent theme's file, so the child theme functions would be used.
*
* @link http://codex.wordpress.org/Theme_Development
* @link http://codex.wordpress.org/Child_Themes
*
* Functions that are not pluggable (not wrapped in function_exists()) are
* instead attached to a filter or action hook.
*
* For more information on hooks, actions, and filters,
* @link http://codex.wordpress.org/Plugin_API
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/
/**
* Set up the content width value based on the theme's design.
*
* @see twentyfourteen_content_width()
*
* @since Twenty Fourteen 1.0
*/
if ( ! isset( $content_width ) ) {
$content_width = 474;
}
/**
* Twenty Fourteen only works in WordPress 3.6 or later.
*/
if ( version_compare( $GLOBALS['wp_version'], '3.6', '<' ) ) {
require get_template_directory() . '/inc/back-compat.php';
}
if ( ! function_exists( 'twentyfourteen_setup' ) ) :
/**
* Twenty Fourteen setup.
*
* Set up theme defaults and registers support for various WordPress features.
*
* Note that this function is hooked into the after_setup_theme hook, which
* runs before the init hook. The init hook is too late for some features, such
* as indicating support post thumbnails.
*
* @since Twenty Fourteen 1.0
*/
function twentyfourteen_setup() {
/*
* Make Twenty Fourteen available for translation.
*
* Translations can be added to the /languages/ directory.
* If you're building a theme based on Twenty Fourteen, use a find and
* replace to change 'twentyfourteen' to the name of your theme in all
* template files.
*/
load_theme_textdomain( 'twentyfourteen', get_template_directory() . '/languages' );
// This theme styles the visual editor to resemble the theme style.
add_editor_style( array( 'css/editor-style.css', twentyfourteen_font_url() ) );
// Add RSS feed links to <head> for posts and comments.
add_theme_support( 'automatic-feed-links' );
// Enable support for Post Thumbnails, and declare two sizes.
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 672, 372, true );
add_image_size( 'twentyfourteen-full-width', 1038, 576, true );
// This theme uses wp_nav_menu() in two locations.
register_nav_menus( array(
'primary' => __( 'Top primary menu', 'twentyfourteen' ),
'secondary' => __( 'Secondary menu in left sidebar', 'twentyfourteen' ),
) );
/*
* Switch default core markup for search form, comment form, and comments
* to output valid HTML5.
*/
add_theme_support( 'html5', array(
'search-form', 'comment-form', 'comment-list',
) );
/*
* Enable support for Post Formats.
* See http://codex.wordpress.org/Post_Formats
*/
add_theme_support( 'post-formats', array(
'aside', 'image', 'video', 'audio', 'quote', 'link', 'gallery',
) );
// This theme allows users to set a custom background.
add_theme_support( 'custom-background', apply_filters( 'twentyfourteen_custom_background_args', array(
'default-color' => 'f5f5f5',
) ) );
// Add support for featured content.
add_theme_support( 'featured-content', array(
'featured_content_filter' => 'twentyfourteen_get_featured_posts',
'max_posts' => 6,
) );
// This theme uses its own gallery styles.
add_filter( 'use_default_gallery_style', '__return_false' );
}
endif; // twentyfourteen_setup
add_action( 'after_setup_theme', 'twentyfourteen_setup' );
/**
* Adjust content_width value for image attachment template.
*
* @since Twenty Fourteen 1.0
*
* @return void
*/
function twentyfourteen_content_width() {
if ( is_attachment() && wp_attachment_is_image() ) {
$GLOBALS['content_width'] = 810;
}
}
add_action( 'template_redirect', 'twentyfourteen_content_width' );
/**
* Getter function for Featured Content Plugin.
*
* @since Twenty Fourteen 1.0
*
* @return array An array of WP_Post objects.
*/
function twentyfourteen_get_featured_posts() {
/**
* Filter the featured posts to return in Twenty Fourteen.
*
* @since Twenty Fourteen 1.0
*
* @param array|bool $posts Array of featured posts, otherwise false.
*/
return apply_filters( 'twentyfourteen_get_featured_posts', array() );
}
/**
* A helper conditional function that returns a boolean value.
*
* @since Twenty Fourteen 1.0
*
* @return bool Whether there are featured posts.
*/
function twentyfourteen_has_featured_posts() {
return ! is_paged() && (bool) twentyfourteen_get_featured_posts();
}
/**
* Register three Twenty Fourteen widget areas.
*
* @since Twenty Fourteen 1.0
*
* @return void
*/
function twentyfourteen_widgets_init() {
require get_template_directory() . '/inc/widgets.php';
register_widget( 'Twenty_Fourteen_Ephemera_Widget' );
register_sidebar( array(
'name' => __( 'Primary Sidebar', 'twentyfourteen' ),
'id' => 'sidebar-1',
'description' => __( 'Main sidebar that appears on the left.', 'twentyfourteen' ),
'before_widget' => '<aside id="%1$s" class="widget %2$s">',
'after_widget' => '</aside>',
'before_title' => '<h1 class="widget-title">',
'after_title' => '</h1>',
) );
register_sidebar( array(
'name' => __( 'Content Sidebar', 'twentyfourteen' ),
'id' => 'sidebar-2',
'description' => __( 'Additional sidebar that appears on the right.', 'twentyfourteen' ),
'before_widget' => '<aside id="%1$s" class="widget %2$s">',
'after_widget' => '</aside>',
'before_title' => '<h1 class="widget-title">',
'after_title' => '</h1>',
) );
register_sidebar( array(
'name' => __( 'Footer Widget Area', 'twentyfourteen' ),
'id' => 'sidebar-3',
'description' => __( 'Appears in the footer section of the site.', 'twentyfourteen' ),
'before_widget' => '<aside id="%1$s" class="widget %2$s">',
'after_widget' => '</aside>',
'before_title' => '<h1 class="widget-title">',
'after_title' => '</h1>',
) );
}
add_action( 'widgets_init', 'twentyfourteen_widgets_init' );
/**
* Register Lato Google font for Twenty Fourteen.
*
* @since Twenty Fourteen 1.0
*
* @return string
*/
function twentyfourteen_font_url() {
$font_url = '';
/*
* Translators: If there are characters in your language that are not supported
* by Lato, translate this to 'off'. Do not translate into your own language.
*/
if ( 'off' !== _x( 'on', 'Lato font: on or off', 'twentyfourteen' ) ) {
$font_url = add_query_arg( 'family', urlencode( 'Lato:300,400,700,900,300italic,400italic,700italic' ), "//fonts.googleapis.com/css" );
}
return $font_url;
}
/**
* Enqueue scripts and styles for the front end.
*
* @since Twenty Fourteen 1.0
*
* @return void
*/
function twentyfourteen_scripts() {
// Add Lato font, used in the main stylesheet.
wp_enqueue_style( 'twentyfourteen-lato', twentyfourteen_font_url(), array(), null );
// Add Genericons font, used in the main stylesheet.
wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.0.2' );
// Load our main stylesheet.
wp_enqueue_style( 'twentyfourteen-style', get_stylesheet_uri(), array( 'genericons' ) );
// Load the Internet Explorer specific stylesheet.
wp_enqueue_style( 'twentyfourteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentyfourteen-style', 'genericons' ), '20131205' );
wp_style_add_data( 'twentyfourteen-ie', 'conditional', 'lt IE 9' );
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
wp_enqueue_script( 'comment-reply' );
}
if ( is_singular() && wp_attachment_is_image() ) {
wp_enqueue_script( 'twentyfourteen-keyboard-image-navigation', get_template_directory_uri() . '/js/keyboard-image-navigation.js', array( 'jquery' ), '20130402' );
}
if ( is_active_sidebar( 'sidebar-3' ) ) {
wp_enqueue_script( 'jquery-masonry' );
}
if ( is_front_page() && 'slider' == get_theme_mod( 'featured_content_layout' ) ) {
wp_enqueue_script( 'twentyfourteen-slider', get_template_directory_uri() . '/js/slider.js', array( 'jquery' ), '20131205', true );
wp_localize_script( 'twentyfourteen-slider', 'featuredSliderDefaults', array(
'prevText' => __( 'Previous', 'twentyfourteen' ),
'nextText' => __( 'Next', 'twentyfourteen' )
) );
}
wp_enqueue_script( 'twentyfourteen-script', get_template_directory_uri() . '/js/functions.js', array( 'jquery' ), '20131209', true );
}
add_action( 'wp_enqueue_scripts', 'twentyfourteen_scripts' );
/**
* Enqueue Google fonts style to admin screen for custom header display.
*
* @since Twenty Fourteen 1.0
*
* @return void
*/
function twentyfourteen_admin_fonts() {
wp_enqueue_style( 'twentyfourteen-lato', twentyfourteen_font_url(), array(), null );
}
add_action( 'admin_print_scripts-appearance_page_custom-header', 'twentyfourteen_admin_fonts' );
if ( ! function_exists( 'twentyfourteen_the_attached_image' ) ) :
/**
* Print the attached image with a link to the next attached image.
*
* @since Twenty Fourteen 1.0
*
* @return void
*/
function twentyfourteen_the_attached_image() {
$post = get_post();
/**
* Filter the default Twenty Fourteen attachment size.
*
* @since Twenty Fourteen 1.0
*
* @param array $dimensions {
* An array of height and width dimensions.
*
* @type int $height Height of the image in pixels. Default 810.
* @type int $width Width of the image in pixels. Default 810.
* }
*/
$attachment_size = apply_filters( 'twentyfourteen_attachment_size', array( 810, 810 ) );
$next_attachment_url = wp_get_attachment_url();
/*
* Grab the IDs of all the image attachments in a gallery so we can get the URL
* of the next adjacent image in a gallery, or the first image (if we're
* looking at the last image in a gallery), or, in a gallery of one, just the
* link to that image file.
*/
$attachment_ids = get_posts( array(
'post_parent' => $post->post_parent,
'fields' => 'ids',
'numberposts' => -1,
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => 'ASC',
'orderby' => 'menu_order ID',
) );
// If there is more than 1 attachment in a gallery...
if ( count( $attachment_ids ) > 1 ) {
foreach ( $attachment_ids as $attachment_id ) {
if ( $attachment_id == $post->ID ) {
$next_id = current( $attachment_ids );
break;
}
}
// get the URL of the next image attachment...
if ( $next_id ) {
$next_attachment_url = get_attachment_link( $next_id );
}
// or get the URL of the first image attachment.
else {
$next_attachment_url = get_attachment_link( array_shift( $attachment_ids ) );
}
}
printf( '<a href="%1$s" rel="attachment">%2$s</a>',
esc_url( $next_attachment_url ),
wp_get_attachment_image( $post->ID, $attachment_size )
);
}
endif;
if ( ! function_exists( 'twentyfourteen_list_authors' ) ) :
/**
* Print a list of all site contributors who published at least one post.
*
* @since Twenty Fourteen 1.0
*
* @return void
*/
function twentyfourteen_list_authors() {
$contributor_ids = get_users( array(
'fields' => 'ID',
'orderby' => 'post_count',
'order' => 'DESC',
'who' => 'authors',
) );
foreach ( $contributor_ids as $contributor_id ) :
$post_count = count_user_posts( $contributor_id );
// Move on if user has not published a post (yet).
if ( ! $post_count ) {
continue;
}
?>
<div class="contributor">
<div class="contributor-info">
<div class="contributor-avatar"><?php echo get_avatar( $contributor_id, 132 ); ?></div>
<div class="contributor-summary">
<h2 class="contributor-name"><?php echo get_the_author_meta( 'display_name', $contributor_id ); ?></h2>
<p class="contributor-bio">
<?php echo get_the_author_meta( 'description', $contributor_id ); ?>
</p>
<a class="contributor-posts-link" href="<?php echo esc_url( get_author_posts_url( $contributor_id ) ); ?>">
<?php printf( _n( '%d Article', '%d Articles', $post_count, 'twentyfourteen' ), $post_count ); ?>
</a>
</div><!-- .contributor-summary -->
</div><!-- .contributor-info -->
</div><!-- .contributor -->
<?php
endforeach;
}
endif;
/**
* Extend the default WordPress body classes.
*
* Adds body classes to denote:
* 1. Single or multiple authors.
* 2. Presence of header image.
* 3. Index views.
* 4. Full-width content layout.
* 5. Presence of footer widgets.
* 6. Single views.
* 7. Featured content layout.
*
* @since Twenty Fourteen 1.0
*
* @param array $classes A list of existing body class values.
* @return array The filtered body class list.
*/
function twentyfourteen_body_classes( $classes ) {
if ( is_multi_author() ) {
$classes[] = 'group-blog';
}
if ( get_header_image() ) {
$classes[] = 'header-image';
} else {
$classes[] = 'masthead-fixed';
}
if ( is_archive() || is_search() || is_home() ) {
$classes[] = 'list-view';
}
if ( ( ! is_active_sidebar( 'sidebar-2' ) )
|| is_page_template( 'page-templates/full-width.php' )
|| is_page_template( 'page-templates/contributors.php' )
|| is_attachment() ) {
$classes[] = 'full-width';
}
if ( is_active_sidebar( 'sidebar-3' ) ) {
$classes[] = 'footer-widgets';
}
if ( is_singular() && ! is_front_page() ) {
$classes[] = 'singular';
}
if ( is_front_page() && 'slider' == get_theme_mod( 'featured_content_layout' ) ) {
$classes[] = 'slider';
} elseif ( is_front_page() ) {
$classes[] = 'grid';
}
return $classes;
}
add_filter( 'body_class', 'twentyfourteen_body_classes' );
/**
* Extend the default WordPress post classes.
*
* Adds a post class to denote:
* Non-password protected page with a post thumbnail.
*
* @since Twenty Fourteen 1.0
*
* @param array $classes A list of existing post class values.
* @return array The filtered post class list.
*/
function twentyfourteen_post_classes( $classes ) {
if ( ! post_password_required() && has_post_thumbnail() ) {
$classes[] = 'has-post-thumbnail';
}
return $classes;
}
add_filter( 'post_class', 'twentyfourteen_post_classes' );
/**
* Create a nicely formatted and more specific title element text for output
* in head of document, based on current view.
*
* @since Twenty Fourteen 1.0
*
* @param string $title Default title text for current view.
* @param string $sep Optional separator.
* @return string The filtered title.
*/
function twentyfourteen_wp_title( $title, $sep ) {
global $paged, $page;
if ( is_feed() ) {
return $title;
}
// Add the site name.
$title .= get_bloginfo( 'name' );
// Add the site description for the home/front page.
$site_description = get_bloginfo( 'description', 'display' );
if ( $site_description && ( is_home() || is_front_page() ) ) {
$title = "$title $sep $site_description";
}
// Add a page number if necessary.
if ( $paged >= 2 || $page >= 2 ) {
$title = "$title $sep " . sprintf( __( 'Page %s', 'twentyfourteen' ), max( $paged, $page ) );
}
return $title;
}
add_filter( 'wp_title', 'twentyfourteen_wp_title', 10, 2 );
// Implement Custom Header features.
require get_template_directory() . '/inc/custom-header.php';
// Custom template tags for this theme.
require get_template_directory() . '/inc/template-tags.php';
// Add Theme Customizer functionality.
require get_template_directory() . '/inc/customizer.php';
/*
* Add Featured Content functionality.
*
* To overwrite in a plugin, define your own Featured_Content class on or
* before the 'setup_theme' hook.
*/
if ( ! class_exists( 'Featured_Content' ) && 'plugins.php' !== $GLOBALS['pagenow'] ) {
require get_template_directory() . '/inc/featured-content.php';
}

Die erste Funktion beschäftigt sich mit Setzen der maximalen Inhaltsbreite:

if ( ! isset( $content_width ) ) {
$content_width = 474;
}

Das bedeutet: Falls $content_width nicht gesetzt ist, wird es hier auf 474 Pixel gesetzt. Bilder, Videos und andere Inhalte dürfen dann maximal diese Breite haben, wenn sie in einem Beitrag eingebunden sind. Als nächstes wird festgelegt, dass Twenty Fourteen erst ab WordPress 3.6 funktioniert. Nun kommen wir zu einer ausführlicheren Funktion, dem _setup():

function twentyfourteen_setup() {
/*
* Make Twenty Fourteen available for translation.
*
* Translations can be added to the /languages/ directory.
* If you're building a theme based on Twenty Fourteen, use a find and
* replace to change 'twentyfourteen' to the name of your theme in all
* template files.
*/
load_theme_textdomain( 'twentyfourteen', get_template_directory() . '/languages' );
// This theme styles the visual editor to resemble the theme style.
add_editor_style( array( 'css/editor-style.css', twentyfourteen_font_url() ) );
// Add RSS feed links tofor posts and comments. add_theme_support( 'automatic-feed-links' ); // Enable support for Post Thumbnails, and declare two sizes. add_theme_support( 'post-thumbnails' ); set_post_thumbnail_size( 672, 372, true ); add_image_size( 'twentyfourteen-full-width', 1038, 576, true ); // This theme uses wp_nav_menu() in two locations. register_nav_menus( array( 'primary' => __( 'Top primary menu', 'twentyfourteen' ), 'secondary' => __( 'Secondary menu in left sidebar', 'twentyfourteen' ), ) ); /* * Switch default core markup for search form, comment form, and comments * to output valid HTML5. */ add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', ) ); /* * Enable support for Post Formats. * See http://codex.wordpress.org/Post_Formats */ add_theme_support( 'post-formats', array( 'aside', 'image', 'video', 'audio', 'quote', 'link', 'gallery', ) ); // This theme allows users to set a custom background. add_theme_support( 'custom-background', apply_filters( 'twentyfourteen_custom_background_args', array( 'default-color' => 'f5f5f5', ) ) ); // Add support for featured content. add_theme_support( 'featured-content', array( 'featured_content_filter' => 'twentyfourteen_get_featured_posts', 'max_posts' => 6, ) ); // This theme uses its own gallery styles. add_filter( 'use_default_gallery_style', '__return_false' ); } endif; // twentyfourteen_setup add_action( 'after_setup_theme', 'twentyfourteen_setup' );

In diesem Bereich wird unter anderem festgelegt, welche Funktionen das Theme unterstützen soll. Mit load_theme_textdomain() wird die Übersetzbarkeit des Themes ermöglicht. In den vorherigen Code-Abschnitten sind euch vielleicht schon die Strings aufgefallen, hinter denen dann noch twentyfourteen steht. Mit add_editor_style() könnt ihr das Design des Backend-Editors verändern – als Parameter übergebt ihr einfach den Pfad zur entsprechenden CSS-Datei.

Mit add_theme_support() wird hier die Unterstützung des Themes für RSS-Links und Post-Thumbnails eingerichtet. Des weiteren unterstützt das Theme beim Suchformular, Kommentarformular und der Kommentarliste HTML5, die verschiedenen Post-Formats, es gibt die Möglichkeit einen eigenen Hintergrund zu definieren und – Theme-spezifisch – wird Featured-Content unterstützt. Weitere Möglichkeiten findet ihr in der Funktionsreferenz. Außerdem werden hier die Menüs definiert, die Größe der Post-Thumbnails wird festgelegt (Breite und Höhe, der dritte Parameter bestimmt, ob die Bilder beschnitten werden sollen – bei false wird proportional skaliert, bei true wird auf die eingestellte Größe zugeschnitten) – zusätzlich wird eine spezielle Bildgröße festgelegt, die twentyfourteen-full-width, bei der die Parameter gleich sind, wie bei den Post-Thumbnails. Diese Angabe kann dann einfach ausgewählt werden, wenn die Größe des auszugebenden Bildes angegeben wird, beispielsweise so:

the_post_thumbnail( 'twentyfourteen-full-width' );

Diese Funktion twentyfourteen_setup wird nun an den Hook after_setup_theme mittels add_action() angehängt. Mit der Funktion twentyfourteen_content_width() wird die oben schon besprochene Content-Breite für die Anhang-Seiten von Bildern verändert. Die nächsten Funktionen sind erstmal nur Theme-spezifisch, deshalb werde ich sie hier kurz überspringen. Der nächste große und wichtige Block ist twentyfourteen_widgets_init(), in dem die Widgets und Sidebars registriert werden – wie oben anhand der primären Sidebar schon besprochen.

Schriftarten, besondere Stylesheets und Skripte

Nun werden Schriftarten und besondere Stylesheets und Skripte eingebunden. Das wäre natürlich auch einfach direkt in der header.php möglich, ist so aber schöner. In der Funktion twentyfourteen_font_url() wird einfach die URL zu einer Google-Font festgelegt. In der Funtion twentyfourteen_scripts() werden nun die verschiedenen Ressourcen eingebunden:

function twentyfourteen_scripts() {
// Add Lato font, used in the main stylesheet.
wp_enqueue_style( 'twentyfourteen-lato', twentyfourteen_font_url(), array(), null );
// Add Genericons font, used in the main stylesheet.
wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.0.2' );
// Load our main stylesheet.
wp_enqueue_style( 'twentyfourteen-style', get_stylesheet_uri(), array( 'genericons' ) );
// Load the Internet Explorer specific stylesheet.
wp_enqueue_style( 'twentyfourteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentyfourteen-style', 'genericons' ), '20131205' );
wp_style_add_data( 'twentyfourteen-ie', 'conditional', 'lt IE 9' );
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
wp_enqueue_script( 'comment-reply' );
}
if ( is_singular() && wp_attachment_is_image() ) {
wp_enqueue_script( 'twentyfourteen-keyboard-image-navigation', get_template_directory_uri() . '/js/keyboard-image-navigation.js', array( 'jquery' ), '20130402' );
}
if ( is_active_sidebar( 'sidebar-3' ) ) {
wp_enqueue_script( 'jquery-masonry' );
}
if ( is_front_page() && 'slider' == get_theme_mod( 'featured_content_layout' ) ) {
wp_enqueue_script( 'twentyfourteen-slider', get_template_directory_uri() . '/js/slider.js', array( 'jquery' ), '20131205', true );
wp_localize_script( 'twentyfourteen-slider', 'featuredSliderDefaults', array(
'prevText' => __( 'Previous', 'twentyfourteen' ),
'nextText' => __( 'Next', 'twentyfourteen' )
) );
}
wp_enqueue_script( 'twentyfourteen-script', get_template_directory_uri() . '/js/functions.js', array( 'jquery' ), '20131209', true );
}
add_action( 'wp_enqueue_scripts', 'twentyfourteen_scripts' );

Mit der Funktion wp_enqueue_style() können Stylesheets eingebunden werden – oder auch Schriften. Die Parameter sind folgende: Zuerst ein Bezeichner, dann der Pfad zur Datei (im Fall der Schriftart ist das der Aufruf der Funktion twentyfourteen_font_url()), als drittes kann ein Stylesheet eingetragen werde, von dem das aktuelle abhängig ist – also nach dem es erst geladen werden soll. Die letzten zwei möglichen Parameter sind optional: Die Versionsnummer und eine CSS-Media-Angabe, also zum Beispiel screen. Mehr Informationen zu dieser Funktion gibt es in der Referenz.

Mit wp_style_add_data() könnt ihr ein Stylesheet von einem Conditional-Tag umschließen lassen. wp_enqueue_script() funktioniert – wer hätte das gedacht – ganz ähnlich wie wp_enqueue_style() und ist für das Einbinden von JavaScrips zuständig. Mit wp_localize_script() könnt ihr ein Skript lokalisieren. Anschließend wird die Funktion wieder mittels add_action() eingebunden, und zwar nach den Skripts und Stylesheets die WordPress einbindet.

Die nächste Funktion, die ihr vielleicht auch für euer eigenes Theme nutzen könntet, ist die twentyfourteen_the_attached_image(). Hiermit wird bei der Anhang-Seite eines Bildes dieses ausgebenen und – falls es aus einer Galerie ist – der Link zum nächsten Bild. Die Funktion twentyfourteen_list_authors() macht, was erwartet wird, und gibt eine Liste der Autoren mit mindestens einem Beitrag aus.

Mit der Funktion twentyfourteen_body_classes() werden die WordPress-Klassen des body-Tags erweitert – je nachdem, welche Eigenschaften auf die aktuelle Ansicht zutreffen. Die Funktion twentyfourteen_wp_title( $title, $sep ) hatten wir am Anfang schon kurz angerissen: Hier wird definiert, wie der Inhalt des

title
-Tags aussehen soll. Zum Schluss werden noch ein paar Dateien eingebunden, die ebenfalls Funktionen für das Theme bereitstellen.

Euer WordPress-Theme: Die style.css

Am Schluss noch ein kleiner Hinweis: Angaben zu eurem Theme, wie Version, Name und so weiter, müsst ihr in der style.css machen, das sieht dann beispielhaft so aus:

/*
Theme Name: Twenty Fourteen
Theme URI: http://wordpress.org/themes/twentyfourteen
Author: the WordPress team
Author URI: http://wordpress.org/
Description: In 2014, our default theme lets you create a responsive magazine website with a sleek, modern design. Feature your favorite homepage content in either a grid or a slider. Use the three widget areas to customize your website, and change your content's layout with a full-width page template and a contributor page to show off your authors. Creating a magazine website with WordPress has never been easier.
Version: 1.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: black, green, white, light, dark, two-columns, three-columns, left-sidebar, right-sidebar, fixed-layout, responsive-layout, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready, accessibility-ready
Text Domain: twentyfourteen
This theme, like WordPress, is licensed under the GPL.
Use it to make something cool, have fun, and share what you've learned with others.
*/

Falls ihr euer Theme anderen zur Verfügung stellen wollt, schaut euch mal den Beitrag über das WordPress-Theme-Directory an.

Ein kompletter Neustart muss nicht sein: Bedient euch bei anderen Themes

Es ist keine gute Idee, immer wieder bei Null anzufangen. Oft ist es hilfreich, wenn man sich in anderen Themes Schnipsel zusammensucht und sie einfach übernimmt – oder das ganze Theme auf einem anderen aufsetzt und bei dem Basis-Theme nur weitere Funktionen hinzufügt oder überflüssige entfernt. Bei der style.css kann man ja bequem von vorne anfangen. Ebenfalls eine gute Idee ist es, sich ein Blank-Theme zu erstellen, wo wirklich nur die wichtigsten Funktionen implementiert sind. Auf dem könnt ihr dann eure zukünftigen Themes aufbauen.

Wenn ihr noch Fragen zu WordPress-Theme-Funktionen oder generell zu habt, schreibt einfach einen Kommentar unter diesen Artikel!

]]>
Florian Brinkmann
WordPress: Statistik-Feature in Version 4.0 für iOS veröffentlicht http://t3n.de/news/wordpress-statistik-feature-535678/ 2014-03-21T06:20:49Z
WordPress hat eine neue iOS-Version der beliebten Blog-Software veröffentlicht. Hauptfeature des Updates ist die bessere Darstellung der Statistiken.

WordPress hat eine neue iOS-Version der beliebten Blog-Software veröffentlicht. Hauptfeature des Updates ist die bessere Darstellung der Statistiken. Damit Webworker die eigene WordPress-Installation auch auf mobilen Geräten verwalten können, bieten die Macher der Blog-Software eigene Applikationen für verschiedene Anbieter an: zum Beispiel für BlackBerry, Android und auch für .

wordpress
WordPress: Die Statistik zeigt euch die Auswertung eures Blogs. (Screenshot: WordPress)

Gestern ist die iOS-Version in der vierten Version veröffentlicht worden, die hauptsächlich die Darstellung der Statistiken verbessert. Dabei wurde das Statistik-Feature von einer klassischen Web-Ansicht in eine native Komponente überführt, was eine Erhöhung der Performance und der Stabilität der App zur Folge haben soll. Darüber hinaus hat WordPress auch eine generelle Erweiterung des Funktionsumfangs für die Statistik angekündigt. Ganz im Sinne von „Perpetual Beta“ sieht WordPress die Entwicklung als „Work in progress“ und stellt die alte Statistik als Web-Ansicht weiterhin zur Verfügung.

WordPress für iOS: Ein Ausblick

Das Team hinter der iOS-App-Entwicklung arbeitet schon an Version 4.0.1, die sich in Perpetual-Beta-Manier um Bugfixes und Verbesserungen drehen wird. Danach haben die Entwickler die Entwicklung von Version 4.1 geplant. Bei Version 4.1 wird der Fokus hauptsächlich auf einer Überarbeitung des Media-Managements der iOS-App liegen.

Wenn ihr euch selbst an der Entwicklung neuer iOS-Versionen für beteiligen wollt, könnt ihr das hier tun. Ihr könnt euch den Quellcode der iOS-App auch bei GitHub runterladen.

WordPress WordPress @ App Store
Preis: Kostenlos

Benutzt ihr WordPress auf eurem iPhone oder iPad?

]]>
Mario Janschitz
WordPress Theme Directory: Die Plattform für dein WordPress-Theme http://t3n.de/news/wordpress-theme-directory-533904/ 2014-03-12T10:28:33Z
Wenn ihr ein WordPress-Theme entwickelt, das ihr anderen kostenlos zur Verfügung stellen möchtet, ist die naheliegendste Plattform dafür das WordPress Theme Directory. Was es vor dem Upload zu...

Wenn ihr ein WordPress-Theme entwickelt, das ihr anderen kostenlos zur Verfügung stellen möchtet, ist die naheliegendste Plattform dafür das WordPress Theme Directory. Was es vor dem Upload zu beachten gibt, beschreiben wir in diesem Artikel.

Wenn ihr euch die Mühe gemacht habt ein WordPress-Theme zu entwickeln, das auch andere nutzen dürfen und sollen, dann möchtet ihr vermutlich auch, dass es von möglichst vielen genutzt wird. Das Theme Directory ist hierfür ein gut geeigneter Platz. Doch bevor ein Theme dort angenommen wird, müssen einige Richtlinien eingehalten werden. Diese sind im Wiki – dem WordPress Codex – gut dokumentiert, aber nicht immer leicht zu finden. Wir werden euch deshalb einen Überblick über die verschiedenen Richtlinien und weiterführende Links an die Hand geben, damit ihr euer WordPress-Theme gut auf das Theme Directory vorbereiten könnt.

Über 2.300 kostenlose WordPress Themes an einen Ort: Das WordPress Theme Directory. (Screenshot: WordPress.org)
Über 2.300 kostenlose WordPress Themes an einen Ort: Das WordPress Theme Directory. (Screenshot: WordPress.org)

WordPress Theme Directory: Die Vorbereitung

Die Testdaten, mit denen auch die Tester bei WordPress.org euer Theme prüfen, könnt ihr über den Punkt „Werkzeuge>Daten importieren“ in euer Test-Blog importieren. Dann könnt ihr euch das Plugin „Developer“ – eine Sammlung von nützlichen Tools – installieren, das euch Anhaltspunkte liefert, was mit eurem Code eventuell nicht stimmt. In der wp-config.php stellt ihr dann WP_DEBUG auf true.

Was muss ein Theme für das WordPress Theme Directory können? Antwort gibt WordPress.org

Auf der Seite „Guidlines: Theme Check“ findet ihr die WordPress-Funktionen, die in eurem Theme integriert sein müssen. Die Funktionen werden hier allerdings nur kurz aufgelistet, ohne eine detailliertere Erklärung. Die Seite „Theme Development“ ist eine gute Anlaufstelle für diese detaillierteren Informationen. Hier findet ihr beispielsweise die Angaben, die in dem Stylesheet-Header gemacht werden können, aus welchen Dateien ein WordPress-Theme mindestens zu bestehen hat oder dass das Design komplett übersetzungsfähig sein muss.

Ein Theme muss neben den ganzen PHP-Dateien auch eine readme-Datei enthalten. Hier ist ein Changelog anzulegen, sowie ein Lizenzhinweis für das Theme und alle genutzten Bibliotheken/Schriftarten/Icon-Sets et cetera. Da das komplette Theme 100% GPL – oder mit einer kompatiblen Lizenz – lizensiert sein muss ist es wichtig, dass diese Ressourcen unter einer der hier angegebenen Lizenzen veröffentlicht sind. Allgemeinere Informationen zur Lizensierung und wie euer Theme heißen darf, findet ihr auf der Site „Guidelines: License, Theme Name, Credit Links, Up-Sell Themes“.

Es gibt auch einige Vorgaben zum Punkt Zugänglichkeit, die für das WordPress Theme Directory erfüllt sein müssen. Unter anderem müssen alle dekorativen Bilder per CSS eingebunden werden, andere Bilder müssen ein alt-Attribut erhalten. Video- und Audio-Dateien dürfen nicht automatisch starten und das Theme muss auch per Tastatur bedienbar sein. Das Theme darf keine Analytics-Skripte oder andere Funktionen enthalten, die sonst Plugins übernehmen.

Die Feuerprobe: Die Prüfung des Themes

Ein gutes Zeichen: Der Theme-Check liefert keine Fehler oder Warnungen mehr. (Screenshot: eigene Installation)
Ein gutes Zeichen: Der Theme-Check liefert keine Fehler oder Warnungen mehr. (Screenshot: eigene Installation)

Wenn ihr glaubt alles standardkonform umgesetzt zu haben, und der Test mit dem Plugin „Theme-Check“ (wird automatisch mit dem Plugin „Developer“ installiert) auch keine Fehler oder Warnungen mehr auswirft, könnt ihr euer Theme beim WordPress Theme Directory hochladen (hierzu wird ein Account bei WordPress.org benötigt).

Anschließend wird euer Theme geprüft. Ihr bekommt einen Link zu einem Ticket, wo dann nach der Prüfung entweder nur vermerkt wird, dass das Theme live ist. Oder es wird, was beim ersten Mal wahrscheinlicher ist, erwähnt, welche Fehler gefunden wurden. Diese Fehler gilt es nun zu beheben, um dann eine neue Version des Themes hochzuladen. Wenn ihr Fragen an den Prüfer habt, gibt es unter dem Ticket die Möglichkeit, Kommentare zu posten.

Fehlt euch noch ein wichtiger Punkt, den ihr gerne genauer erklärt haben wollt, weil ihr dazu in der Dokumentation nichts gefunden habt? Schreibt einfach einen Kommentar mit eurer Frage unter den Beitrag.

]]>
Florian Brinkmann
WordPress 3: SEO für WordPress [t3n-Video-Workshop] http://t3n.de/news/wordpress-3-seo-532876/ 2014-03-07T09:54:43Z
Heute führen wir auf t3n.de die Video-Serie weiter, in der wir euch in Zusammenarbeit mit Galileo Press Video-Workshops zu verschiedenen Themen für Webentwickler und Digitalarbeiter präsentieren... ...

Heute führen wir auf t3n.de die Video-Serie weiter, in der wir euch in Zusammenarbeit mit Galileo Press Video-Workshops zu verschiedenen Themen für Webentwickler und Digitalarbeiter präsentieren. Das heutige Thema: „WordPress 3: Suchmaschinenoptimierung für WordPress”.

In Bereich der Suchmaschinenoptimierung lässt sich grob zwischen Onpage- und Offpage-Optimierung unterscheiden. Im neuen t3n-Video-Workshop zeigt euch Trainer Jonas Hellwig, wie ihr bei eurer WordPress-3-Installation die Onpage-Optimierung verbessert. Angefangen bei den richtigen Einstellungen über das Anpassen der Seitentitel und der Meta-Description bis hin zur Anlegung einer XML-Sitemap.

Noch mehr Video-Workshops

Noch nicht genug zum Thema Webentwicklung? Hier gelangst du zum letzten Teil unserer Serie. Darin bekommst du eine Einführung in die CSS3-Box-Modell-Alternative Flexbox.

galileo-press-wordpress-3 In den nächsten Video-Workshops wird es um Themen aus den Bereichen HTML5 & CSS3, und Facebook-Marketing gehen. Wer mehr zum Thema erfahren will, der kann sich kostenfrei zum Beispiel knapp eine Stunde Videos aus dem Training (Affiliate-Link) von Jonas Hellwig anschauen.

]]>
Johannes Schuba
Das erste Blog erstellen: Der t3n-Guide mit Tipps für Wordpress, Ghost und Co. http://t3n.de/news/blog-erstellen-bloggen-lernen-guide-tipps-528888/ 2014-02-23T12:07:03Z
Wer ein Blog erstellen will, sollte einige Dinge beachten. Das beginnt bei dem System, auf dem das Blog laufen soll und endet beim Verteilen der Inhalte. Die t3n-Checkliste mit Blog-Tipps für...

Wer ein Blog erstellen will, sollte einige Dinge beachten. Das beginnt bei dem System, auf dem das Blog laufen soll und endet beim Verteilen der Inhalte. Die t3n-Checkliste mit Blog-Tipps für Einsteiger.

Bloggen: Die Qual der Wahl

Möglichkeiten, ein zu führen, gibt es viele – und ständig kommen neue dazu. Es gibt Plattformen, auf denen ihr nur einen Account erstellen müsst und sofort bloggen könnt. Und es gibt unzählige Anbieter für Blog-Software, die ihr auf dem eigenen Webspace installieren könnt. Wir stellen euch die bekanntesten und geeignetsten Lösungen vor.

Mit diesen Lösungen steht dem eigenen Blog nichts mehr im Weg – womit ihr in guter Gesellschaft seid. 173 Millionen Blogs gab es Ende 2011, heute dürften es vermutlich also weit über 200 Millionen sein. Solltet ihr übrigens anfangs nicht wissen, worüber ihr schreiben sollt: 10 Quellen für erstklassigen Content hat der Kollege Andreas Weck für euch zusammengestellt.

Das meistgenutzte Blog-System der Welt: WordPress

WordPress ist das meist eingesetzte CMS und Blogsystem. (Grafik: WordPress)
WordPress ist das meist eingesetzte CMS und Blogsystem. (Grafik: WordPress)

WordPress ist das bekannteste und meistgenutzte Content-Management-System (CMS) weltweit. Ursprünglich als reine Blog-Software gestartet, kann es auch problemlos dazu genutzt werden, „richtige” Websites zu betreiben. Bei gibt es zwei Möglichkeiten: Entweder ihr nutzt die Plattform WordPress.com oder eine selbst gehostete Version. Wenn ihr einfach nur loslegen oder erstmal ausprobieren wollt, könnte WordPress.com das richtige sein. Bei der Registrierung könnt ihr aus drei Paketen wählen: „WordPress.com Anfänger” (kostenlos), „WordPress.com Premium” (aktuell 80 Euro pro Jahr) und „WordPress.com Business” (240 Euro pro Jahr) stehen hier zur Auswahl.

In dem Anfänger-Paket mit drei Gigabyte Speicherplatz kann keine benutzerdefinierte Domain gewählt werden. Außerdem wird in diesem Paket Werbung eingebunden und das Design eines gewählten Themes (Schriftarten et cetera) kann nicht individuell angepasst werden. Premium-Themes sind nicht möglich, ebenso wenig das Hochladen und Abspielen von HD-Videos direkt auf der eigenen Seite. Support kommt hier von der Community.

In der Premium-Version mit 13 Gigabyte sind dann die meisten Einschränkungen der Anfänger-Version aufgehoben. Nur Premium-Themes sind weiterhin nicht möglich. Support gibt es neben der Community per E-Mail. Das Business-Paket lässt dann kaum Wünsche offen: Neben unbegrenztem Speicherplatz und ebenso uneingeschränkter Anzahl von Premium-Themes bekommt man Support komfortabel per Live-Chat.

WordPress.com bietet verschiedene Blog-Pakete an. (Screenshot: WordPress.com)
WordPress.com bietet verschiedene Blog-Pakete an. (Screenshot: WordPress.com)

Nach erfolgreicher Registrierung mit Bestätigung der eigenen E-Mail-Adresse kann es losgehen. Nach der ersten Anmeldung bekommt ihr Empfehlungen für Blogs, denen ihr folgen könntet. Wechselt ihr dann zum gerade eingerichteten Blog könnt ihr direkt starten. Für euer WordPress.com Blog könnt ihr Themes von der offiziellen Seite beziehen. Aktuell gibt es 142 kostenlose und 93 Premium Themes. Selbst erstellte Themes können nicht hochgeladen werden.

Von der Registrierung bis zum ersten Artikel sind es mit WordPress.com kaum fünf Minuten. Umfangreiche Anpassungen im Design sind aber beispielsweise erst ab der Premium-Version möglich. Hinzu kommt, dass es nur relativ wenige Themes zur Auswahl gibt und keine Plugins hochgeladen werden können. Trotz dieser Einschränkungen laufen viele populäre Seiten mit WordPress.com – zum Beispiel TechCrunch.

Blog-Tipps: Die eigene WordPress-Installation

Die zweite Möglichkeit bei WordPress ist eine eigene Installation. Hier habt ihr dann alle Freiheiten, die WordPress zu bieten hat. Ergänzend zu dieser kurzen Anleitung könnt ihr euch nebenher die von Ilja Zaglov beschriebenen 10 Blog-Tipps zu vermeidbaren Anfängerfehler anschauen.

Eine aktuelle WordPress-Installation 3.8.1 benötigt eine MySQL-Datenbank mit mindestens MySQL 5.0 und PHP 5.2.4 oder höher. Bestenfalls habt ihr bei eurem Hoster neben einem FTP-Zugang einen SSH-Zugang, womit unter anderem eine verschlüsselte Übertragung möglich ist. Außerdem geht die Installation mit SSH schneller von der Hand. Ein eigener Server oder ein virtueller Server sind keine Voraussetzung, ein Webhosting-Paket tut es vollkommen. Drei Hosting-Anbieter werden auch auf der offiziellen Seite wordpress.org vorgestellt.

Bevor ihr WordPress installieren könnt, müsst ihr die Dateien erst mal auf dem Webspace bereitstellen. Die aktuelle Version in deutscher Sprache könnt ihr euch auf der Seite von WordPress Deutschland runterladen, die englische Version über WordPress.org. Wenn ihr einen SSH-Zugang zu eurem Webspace habt, könnt ihr euch den Download der zip-Datei sparen. Verbindet euch mit eurem Webspace (wie das geht, erfahrt ihr bei eurem Hostingprovider) und wechselt in der Kommandozeile in den Ordner, in dem ihr eure Installation haben wollt. Das geht mit dem Befehl:

cd hierDerPfad

Holt euch die Dateien auf euren Webspace und entpackt das Archiv. Je nachdem, ob ihr die deutsche oder englische Version nutzen woll, passt den Link und den Archivnamen an:

wget http://wordpress.org/latest.zip
unzip latest.zip

Nun liegt in dem Ordner eurer Wahl ein Ordner mit dem Namen wordpress. Die Dateien aus dem Ordner sollten eine Ebene höher in den Ordner kopiert werden, auf das eure Domain für das Blog verweist. Außerdem sollten anschließend der wordpress-Ordner und das Archiv gelöscht werden. Auch hier muss wieder der Code angepasst werden, je nachdem, wie das Archiv heißt.

mv wordpress/* ./
rmdir ./wordpress/
rm -f latest.zip

Weiter geht es mit der Installation: Wenn euch nur FTP zur Verfügung steht, dann müsst ihr das zip-Archiv zuerst runterladen. Anschließend entpackt ihr das Archiv und ladet den Inhalt des Ordners wordpress auf euren Webspace. Nachdem ihr jetzt alle Dateien auf dem Webspace habt, muss eine Datenbank angelegt werden (falls noch nicht vorhanden). Das geht im Administrationsbereich eures Hosters. Sucht euch in dem Bereich der Datenbanken anschließend die Informationen Benutzername, Datenbankname, Datenbankpasswort und Datenbankhost (eventuell einfach localhost, fragt im Zweifel euren Hoster).

Wenn ihr alle Daten beisammen habt, öffnet die Datei wp-config-sample.php in einem Editor (beispielsweise Notepad++). Die findet ihr in dem Ordner auf eurem Webspace, in dem ihr die WordPress-Dateien entpackt oder hochgeladen habt. Im oberen Bereich der Datei solltet ihr folgenden Abschnitt finden:

define('DB_NAME', 'database_name_here');
/** MySQL database username */
define('DB_USER', 'username_here');
/** MySQL database password */
define('DB_PASSWORD', 'password_here');
/** MySQL hostname */
define('DB_HOST', 'localhost');

Ersetzt hier die Platzhalter durch die Daten, die ihr euch im Konfigurationsbereich eures Anbieters herausgesucht habt. Weiter unten findet ihr folgenden Bereich, in dem ihr Authentifizierungscodes eintragen müsst:

define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');

Behilflich ist euch dabei ein Generator von WordPress.org. Ersetzt mit den generierten Zeilen einfach die aus dem obigen Ausschnitt. Noch weiter unten wird das Tabellenpräfix für die Datenbanktabellen festgelegt:

$table_prefix = 'wp_';

Hier ersetzt ihr zur besseren Sicherheit das wp durch eine längere und zufällige Zeichenfolge. Dazu könnt ihr einfach noch mal den Generator für die Sicherheitsschlüssel laden und einen Teil eines Schlüssels als neues Präfix nutzen. Jetzt speichert ihr die Datei unter dem Namen wp-config.php in dem gleichen Ordner ab und ladet sie auf den Webspace. Anschließend ruft ihr die Installationsseite auf (beispiel.de durch eure Domain ersetzen): http://beispiel.de/wp-admin/install.php. Wenn ihr die Dateien in einem Unterordner habt, passt einfach den Pfad an.

Konfigurationsseite der WordPress-Installation. (Screenshot: eigene WordPress-Installation)
Konfigurationsseite der WordPress-Installation. (Screenshot: WordPress)

Wenn bis hierhin alles funktioniert hat, sollte sich die oben abgebildete Seite öffnen. Hier gebt ihr jetzt die Informationen über euer Blog ein. Wenn WordPress erfolgreich installiert wurde, erhaltet ihr eine Erfolgsmeldung mit einem Link zur Login-Seite und habt eine voll funktionsfähige WordPress-Installation auf eurem Webspace. Wenn ihr jetzt ins Backend wollt, hängt an die Domain eures Blogs einfach ein /wp-admin an.

Jetzt solltet ihr unter „Einstellungen > Permalink“ noch die Struktur der Links eures Blogs suchmaschinen- und benutzerfreundlich anpassen.

Die Auswahl an Themes für WordPress ist groß. Eine gute Anlaufstelle ist das WordPress Themes directory. Hier gibt es aktuell 2.296 kostenlose Themes und eine Übersicht von kommerziellen Anbietern. Auch hier auf t3n.de wurden schon häufig WordPress Themes vorgestellt. Bei der eigenen WordPress-Installation ist die Einrichtung etwas aufwendiger als bei WordPress.com. Vorteil gegenüber WordPress.com ist jedoch, dass ihr Zugriff auf viele Plugins und Themes habt und alles anpassen könnt, wie es euch gefällt. Ein Nachteil ist, dass bei einer eigenen Installation mehr Eigeninitiative gefragt ist, was die technische Pflege des Blogs angeht. Hier geht es hauptsächlich um regelmäßige Updates, die aber leicht per Klick erledigt werden können.

Wenig Aufwand und sofort loslegen mit Blogger.com

Über die Schaltfläche links kann bei Blogger einfach ein neues Blog angelegt werden. (Screenshot: Blogger)
Über die Schaltfläche links kann bei Blogger einfach ein neues Blog angelegt werden. (Screenshot: Blogger)

Um ein Blog bei Blogger.com zu erstellen, benötigt ihr lediglich ein Google-Konto. Anschließend wählt ihr auf der Blogger-Site den Punkt „Neuer Blog” links in der Navigation. Nachdem ein Titel und eine Adresse festgelegt wurden, ist das Blog auch schon fertig eingerichtet. Themes sind bei Blogger sogenannte „Vorlagen”, die sich dann noch individuell über den Menüpunkt „Layout” anpassen lassen.

Blogger.com bietet eine schnelle und einfache Möglichkeit, ein Blog zu erstellen. Die individuellen Einstellungsmöglichkeiten beim Design sind ziemlich groß, gewählt werden muss aber aus relativ wenigen Vorlagen.

Eine Blog-Software für Experimentierfreudige: Ghost

Ghost ist eine junge Blog-Software, die unter der Leitung eines ehemaligen WordPress-Mitarbeiters entwickelt wurde. will sich auf das Wesentliche beschränken und eine reine Blog-Software sein. Ilja Zaglov hat das Blog-System für t3n getestet. Wie ihr das System installiert, hat Mario Janschitz in seinem Artikel beschrieben.

Es gibt die Möglichkeit, ein Ghost-Blog direkt bei ghost.org zu hosten. Die Preise beginnen hier bei fünf Dollar pro Monat für ein Blog mit maximal 10.000 Views pro Monat. Die andere Möglichkeit ist, sich einen eigenen Hoster zu suchen. Dieser muss aber Node.js unterstützen.

Es gibt natürlich noch weitere Blogging-Plattformen wie etwa Medium, das Kim Rixecker bereits hier auf t3n.de vorgestellt hat. Wenn ihr ein Foto-Blog plant, wäre auch Tumblr eine Möglichkeit.

Das Auge liest mit: Die Theme-Auswahl

viewport

Unabhängig von der Wahl der Blog-Software solltet ihr ein paar Dinge bei der Wahl des Themes beachten. Idealerweise ist das Theme responsive. Das bedeutet vereinfacht, dass sich das Design an die Breite des Viewports (Breite des Browsers) oder auf mobilen Geräten an die Gerätebreite anpasst. Damit sollten die Inhalte auf allen Geräten und in allen Situationen bestmöglich lesbar und zugänglich sein.

Wichtig ist außerdem eine gute Lesbarkeit. Wer auf einer Seite von einer Bleiwüste empfangen wird, die vielleicht auch noch schwarz auf Dunkelgrau dargestellt ist, wird schnell wieder verschwunden. Wenn es nicht zufällig zum Thema des Blogs passt, sollten darüber hinaus nicht zu viele verschiedene Farben genutzt werden. Außerdem sollte die Wirkung von Farben berücksichtigt und zueinander passende Farben verwendet werden.

Am Ende steht aber über allem der persönliche Geschmack. Wenn das Design von allen gelobt wird, ihr damit aber nicht warm werdet, solltet ihr das Theme wechseln oder anpassen, bis auch ihr zufrieden seid.

Nicht leichtfertig eine Abmahnung riskieren: Blog-Tipps für rechtliche Grundlagen

Es gibt ein paar rechtliche Aspekte, die berücksichtigt werden sollten, wenn ihr ein Blog betreibt. Allerdings können wir euch hier nur einige kurze Hinweise geben, die natürlich keine Rechtsberatung ersetzen. Dennoch: Ein korrektes und vollständiges Impressum ist wichtig. Wenn ihr nicht sicher seid, ob ihr ein Impressum braucht oder nicht, legt lieber eins an. Behilflich ist da beispielsweise der Impressums-Generator von eRecht24.

Grundsätzlich gilt: Bevor ihr ein fremdes Bild für einen Beitrag oder ähnliches verwendet, informiert euch darüber, ob und wenn ja für welchen Zweck das Bild unter welchen Bedingungen genutzt werden darf. Doch auch ein selbst aufgenommenes Bild sollte nicht ohne Nachdenken eingesetzt werden. Personen beispielsweise haben ein Recht an ihrem eigenen Bild. Bei anderen Inhalten sollte ähnlich vorgegangen werden.

Tuning für WordPress: Plugins

Gute Anlaufstelle für WordPress-Plugins: Das Plugin Directory von WordPress.org. (Screenshot: WordPress)
Gute Anlaufstelle für WordPress-Plugins: Das Plugin Directory von WordPress.org. (Screenshot: WordPress)

In diesem Abschnitt gehe ich nur auf Plugins für eine eigene WordPress-Installation ein. Bei WordPress.com gibt es keine Möglichkeit, Plugins zu installieren – an Plugins kann nur genutzt werden, was schon vorinstalliert ist. Auch bei Blogger und Ghost scheint es diese Möglichkeit nicht zu geben. Im anschließenden Backup-Teil beschäftige ich mich auch wieder mit den anderen Plattformen.

Viele kostenlose Plugins findet ihr auf der offiziellen Plugin-Seite bei WordPress.org. Ihr solltet es bei der Fülle von Plugins aber nicht übertreiben, sonst wird euer Blog schnell ausgebremst. Beschränkt euch also auf die für euch Wichtigsten und prüft immer wieder, ob ihr alle installierten Plugins noch braucht. Ein Plugin, das bei der Suchmaschinenoptimierung behilflich ist, sollte selbstverständlich für ein Blog sein. Lars Budde hat in seinem Artikel SEO-Plugins für WordPress vorgestellt. Dieser Liste hinzufügen möchte ich noch das kostenpflichtige wpSEO.

Auch ein gutes Cache-Plugin ist wichtig und kann helfen, die Inhalte schneller auszuliefern. Das muss aber nicht in allen Fällen so sein, darum heißt es testen, testen, testen! Fünf Caching-Plugins für WordPress wurden hier auf t3n.de schon vorgestellt, ebenfalls beliebt ist Cachify.

Antispam-Plugins ersparen darüber hinaus viel Ärger und Aufwand. Selbst wenn ein Blog nur wenige Besucher hat, kommen doch erstaunlich viele Spam-Kommentare zusammen. Zu empfehlen ist hier Antispam Bee. Akismet ist bei jeder WordPress-Installation vorinstalliert, datenschutzrechtlich aber nicht unumstritten, wie ihr bei WordPress Deutschland News nachlesen könnt.

Wenig geliebt und doch so wichtig: Das Backup

Ich weiß aus eigener Erfahrung, dass man sich als frisch gebackener Blogger nicht unbedingt Gedanken über Backups macht. Viel ist ja noch nicht geschrieben, was soll da groß passieren? Außerdem ist ein Server-Ausfall mit Datenverlust doch so unwahrscheinlich, es wird einen schon nicht treffen. Wenn dann aber plötzlich alle Daten weg sind, ist es in jedem Fall ärgerlich. Egal, ob erst fünf Artikel geschrieben wurden oder 100. Vielleicht war nur der Webspace betroffen und die Datenbank ist noch da. Dann sind aber trotzdem alle Bilder weg, das angepasste Theme existiert nicht mehr et cetera. Gedanken über ein regelmäßiges Backup solltet ihr euch also unabhängig von der Plattform machen.

Bei der eigenen WordPress-Installation gibt es zwei Möglichkeiten des Backups: einmal das manuelle Backup, bei dem alle Dateien händisch per FTP vom Webspace geladen werden und die Datenbank exportiert wird. Die andere Möglichkeit – per Plugin – ist weitaus komfortabler. Das Plugin BackWPup ermöglicht es, verschiedene Backup-Pläne zu erstellen. Beispielsweise könnt ihr einmal wöchentlich die Dateien plus die Datenbank sichern. Für einen Plan kann man auch mehrere Sicherungs-Methoden einstellen: Das Backup kann zum Beispiel in eine zip-Datei gesichert werden, die dann nur noch runtergeladen werden muss. Zusätzlich könnte das Backup auf einen S3-Service übertragen werden – wie Amazons S3 oder den Cloud-Storage von HostEurope.

Das Backup eines WordPress.com-Blogs wird laut Support-Site vom Anbieter übernommen – manuelle Backups sind zudem über die Export-Funktion möglichg. Ein Blog bei Blogger wird nicht automatisch gesichert. Ein Backup kann über die „Export-Blog”-Funktion allerdings erstellt werden. Bei Ghost müsst ihr euch ebenfalls selbst um Backups kümmern. Laut Ghost-Guide müsst ihr dazu, eingeloggt in die Ghost-Installation, den Pfad /ghost/debug/ aufrufen, wo ihr einen Export-Button findet.

Social Media für Blogger: Inhalte verbreiten

Wenn ein Beitrag veröffentlicht wurde, sollte dieser am Besten auch über andere Kanäle verbreitet werden, damit die Reichweite erhöht wird. Der offensichtlichste Weg ist natürlich die Verbreitung über die gängigen Sozialen Netzwerke wie Facebook, Twitter und Google+. Es bietet sich an, die Inhalte gezielt zu verteilen, bei Google+ beispielsweise in einer Community, die sich mit dem Thema befasst. Andere soziale Kanäle wie Tumblr können sinnvoll sein, wenn Bilder oder Videos Bestandteil des Beitrags sind. Ein paar Tools, die beim Crossposting behilflich sind, hat Timo Stoppacher in seinem Artikel vorgestellt.

Die Leser, die ihr schon gewonnen habt, könnt ihr per RSS-Feed und/oder Newsletter auf dem Laufenden halten. Ein Newsletter sollte nicht zu häufig verschickt werden, damit die Abonnenten nicht genervt sind.

Bloggen oder nicht? Ein Fazit

Es gibt viele Blog-Plattformen und -Software. Wenn ihr möglichst schnell bloggen wollt und geringen Aufwand schätzt, sind Plattformen wie Blogger und WordPress.com eine gute Anlaufstelle. Wer lieber mehr Kontrolle und Möglichkeiten zum Probieren und Basteln hat, dem sei WordPress ans Herz gelegt. Für die Experimentierfreudigen können neue und noch etwas instabile Systeme wie Ghost das richtige sein.

]]>
Florian Brinkmann
Klein, aber oho! Was sind eigentlich Child-Themes in WordPress? http://t3n.de/news/wordpress-child-themes-527723/ 2014-02-15T08:18:05Z
Templates für WordPress zu gestalten oder anzupassen ist einfach und gängige Praxis, aber zahlen sich auch Wordpress-Child-Themes in der Entwicklung aus? Wir sagen ja – und verraten euch, warum.

Templates für WordPress zu gestalten oder anzupassen ist einfach und gängige Praxis, aber zahlen sich auch WordPress-Child-Themes in der Entwicklung aus? Wir sagen ja – und verraten euch, warum. WordPress-Themes sind bei Webdesignern, Frontend-Entwicklern und auch bei Laien sehr beliebt. Häufig nutzen sie freie oder kommerzielle Themes für ihre Projekte und modifizieren sie dann nach eigenen oder den Vorlieben des Kunden. Zwar werden immer mehr Themes mit unterschiedlichen Optionen ausgestattet, selten genügen diese jedoch für eigene Anforderungen.

Seitdem mit der Version 3.0 auch die WordPress-Child-Themes eingeführt wurden, können Website-Betreiber ihrer Individualität nun individuellen Ausdruck verleihen, ohne zu befürchten, dass ihre Anpassungen am Theme durch Updates verloren gehen.

WordPress: Was sind Child-Themes?

Das WordPress-Child-Theme ist ein Theme, das die Funktionen eines anderen übergeordneten Themes erbt, des sogenannten Parent-Themes (Eltern- oder auch Mutter-Theme). Ein Child-Theme ist der sicherste und bisher eleganteste Weg, individuelle Änderungen am Parent-Theme vorzunehmen. Denn anstelle von direkten Änderung der Theme-Dateien am eigentlichen Theme kannst du ein Child-Theme erstellen und darin die gewünschten Änderungen vornehmen. Daraus ergeben sich folgende Vorteile:

  • Wenn du ein bestehendes Theme modifizierst und dieses aktualisiert wird, werden deine Änderungen verloren gehen. Mit einem Child-Theme kannst du das übergeordnete Theme aktualisieren, wobei deine Änderungen erhalten bleiben.
  • Child-Themes können die Entwicklungsphase beschleunigen.
  • Child-Themes können das Parent-Theme als Framework nutzen.
  • Anfänger können sich an Theme-Entwicklung ausprobieren, ohne Gefahr zu laufen, Schäden am eigentlichen Theme zu verursachen.

So erstellst du WordPress-Child-Themes

In nur zwei sehr einfachen Schritten kannst du dein eigenes Child-Theme erstellen:

  1. Erstell einen Ordner im Themes-Verzeichnis deiner WordPress-Installation. Der Pfad des Themes-Verzeichnisses lautet dein-wordpress/wp-content/themes. Vergib eine sinnvolle Ordnerbezeichnung ohne Leerzeichen. Üblicherweise solltest du die Bezeichnung des Ordners vom Parent-Theme verwenden und mit „-child“ ergänzen, wie zum Beispiel „twentyfourteen-child“.
  2. Erstell jetzt eine CSS-Datei namens style.css und leg sie in das Verzeichnis des Child-Themes unter wp-content/themes/twentyfourteen-child ab. Diese CSS-Datei – mit einigen Strings in einem Kommentar – ist die einzige Datei, die für die Erstellung eines Child-Themes erforderlich ist. Innerhalb der CSS-Datei sieht der benötigte Code wie folgt aus:
/*
 Theme Name:   Twenty Fourteen Child
 Theme URI:    http://t3n.de/news/wordpress-child-theme-erstellen
 Description:  Twenty Fourteen Child-Theme
 Author:       Jonathan Torke
 Author URI:   http://pixeltuner.de
 Template:     twentyfourteen
 Version:      1.0.0
 Tags:         light, dark, right-sidebar, responsive-layout
 Text Domain:  twenty-fourteen-child
*/

@import url("../twentyfourteen/style.css");

/* Theme Anpassungen beginnen hier */
.site-title
{
    font-size: 26px;
}
/* Theme Anpassung enden hier */

Die einzigen erforderlichen Zeilen sind „Theme Name“ und „Template“. Jede weitere Zeile kannst du nach Belieben anpassen oder auch entfernen.

  • Vergib für „Theme Name“ (Zeile 2) eine sinnvolle Bezeichnung wie zum Beispiel Twenty Fourteen Child.
  • Die Template-Bezeichnung (Zeile 7) benötigt als Zuweisung die Ordnerbezeichnung des Parent-Themes. In diesem Beispiel liegt das Parent-Theme im Ordner „twentyfourteen“. Also würdest du Template: twentyfourteen verwenden.
  • Jetzt können Änderungswünsche am Design durch CSS vorgenommen werden. In diesem Beispiel habe ich die Schriftgröße des Blogtitels auf 26 Pixel geändert (Zeile 16-19).
  • Außerdem kann der Aufruf @import url('../twentyfourteen/style.css'); (Zeile 13) entfallen, vorausgesetzt, du willst dir eine komplett eigene CSS-Struktur aufbauen.

Bevor du das Child-Theme aktivierst, erstell noch schnell eine Screenshot-Grafik (880 x 660 Pixel) für das Child-Theme, die als Vorschaubild der verfügbaren Themes im Adminbereich dient. Speicher diese Grafik als screenshot.png unter wp-content/themes/twentyfourteen-child ab.

WordPress: Child-Themes aktivieren

Jetzt kannst du das Child-Theme aktivieren.

  • Logg Dich dazu in den Admin-Bereich deiner WordPress-Instanz ein und navigier dich über die linke Admin-Navigation zu Design > Themes. Hier siehst du jetzt dein Child-Theme mit den anderen verfügbaren Themes aufgelistet.
  • Klick auf „Aktivieren“.
wordpress-child-theme-aktivieren
Hier könnt ihr WordPress-Child-Themes aktivieren. (Screenshot: WordPress)

Das war’s schon. Jetzt ist dein Child-Theme aktiv und alle Stylesheet-Änderungen in twentyfourteen-child/style.css überschreiben die betroffenen Stylesheets des Parent-Themes.

Anpassungen weiterer Theme-Dateien

Neben der CSS-Datei kannst du zusätzlich weitere Parent-Theme-Dateien wie Code der index.php-, header.php- oder footer.php-Datei durch das Child-Theme überschreiben. Falls du also mehr als nur die style.css-Datei anpassen willst, kann dein Child-Theme jede Datei des Parent-Themes überschreiben, sogar Dateien, die nicht im Parent-Theme vorhanden sind.

Ein Beispiel: Sollte das Parent-Theme keine home.php-Datei beinhalten, kannst du sie trotzdem in dein Child-Theme hinzufügen. wird sie erkennen und laden, da es immer zuerst nach einem Child-Theme und einer darin angeforderten Datei sucht. Erst im weiteren Schritt bedient sich des Parent-Themes und sucht da nach der benötigten Theme-Datei. Um zu verstehen, welches WordPress entscheidet zu laden, empfehle ich, einen Blick auf die Template-Hierarchie zu werfen.

]]>
Jonathan Torke
So setzt ihr WordPress ein: Treehouse-Tutorial erklärt euch das CMS http://t3n.de/news/wordpress-tutorial-treehouse-cms-527529/ 2014-02-07T15:01:48Z
Die Tutorial-Plattform Treehouse bietet einen umfassenden Video-Kurs für WordPress-Einsteiger an. Von der Installation des Content-Management-Systems bis zu Widgets und Plugins werden alle wichtigen. ...

Die Tutorial-Plattform Treehouse bietet einen umfassenden Video-Kurs für WordPress-Einsteiger an. Von der Installation des Content-Management-Systems bis zu Widgets und Plugins werden alle wichtigen Themen abgehandelt.

WordPress-Tuorial: Treehouse hilft Einsteigern mit einem Video-Kurs. (Screenshot: Treehouse)
WordPress-Tutorial: Treehouse hilft Einsteigern mit einem Video-Kurs. (Screenshot: Treehouse)

WordPress-Tutorial: Treehouse zeigt Anfängern, wie es geht

WordPress ist die mit Abstand beliebteste Blogging-Plattform. Von den zehn Millionen größten Webseiten der Welt setzen 18,9 Prozent auf das Content-Management-System (). Insgesamt sollen mehr als 60 Millionen Webseiten auf laufen. Grund dafür dürfte auch die vergleichsweise einfache Einrichtung des Systems sein. Trotzdem können Anfänger von einer eigenen WordPress-Installation schnell eingeschüchtert sein. Ein umfangreiches Videotutorial von Treehouse soll dabei helfen, diese Ängste zu überwinden.

Der Kurs ist auf Englisch und in sechs Themengebiete unterteilt. So sollen Anfänger von der Installation über die Anpassung von Themes bis hin zum Einsatz von und alle wichtigen Informationen über den Einstieg bei WordPress erhalten. Zu jedem Themengebiet gibt es jeweils mehrere Videos, die euch durch alle wichtigen Schritte führen. Am Ende jedes Themas könnt ihr euer gelerntes Wissen anhand eines Tests überprüfen.

WordPress-Tutorial: Nicht umsonst aber mit kostenloser Testphase

Leider ist das WordPress-Tutorial wie alle Kurse auf Treehouse nicht kostenlos. Eine einfache Mitgliedschaft auf der Tutorialseite schlägt mit 25 US-Dollar monatlich zu buche. Allerdings gibt es die Möglichkeit eine 14-tägige Testmitgliedschaft abzuschließen. Um diese in Anspruch zu nehmen, müsst ihr eure Kreditkartendaten hinterlegen oder die Zahlung per PayPal autorisieren. Wenn ihr euren Account nicht rechtzeitig kündigt, werden euch die Kosten nach Ablauf des Testzeitraums berechnet.

Trotzdem könnte die umfangreiche Videoanleitung für den ein oder anderen interessant sein. Mit der Mitgliedschaft bekommt ihr außerdem Zugriff auf unzählige weitere Kurse des Anbieters. Zum Thema WordPress gibt es dort beispielsweise fünf weitere Kurse. Es werden aber auch verschiedene Themen wie Web-Entwicklung, Design, iOS oder Android angeboten. Wer daran kein Interesse hat, sich aber trotzdem umfassender über WordPress informieren möchte, dem können wir den Artikel „WordPress: 170 aktuelle Quellen und Blogs zum populären CMS“ ans Herz legen. Ebenfalls sehr hilfreich für jeden WordPress-Einsteiger ist der Artikel „WordPress: 10 vermeidbare Anfängerfehler" von unserem Kollegen Ilja Zaglov.

via venturebeat.com

]]>
Kim Rixecker
Ghost mit mehr Features: WordPress mit Gust http://t3n.de/news/gust-wordpress-admin-panel-522447/ 2014-01-19T11:55:58Z
Für Ghost-Fans mit fester Bindung an WordPress ist Gust genau das Richtige. Das Plugin bietet in Sachen Optik und Funktionalität eine 1:1-Kopie des Ghost-Editors für WordPress.

Für Ghost-Fans mit fester Bindung an WordPress ist Gust genau das Richtige. Das Plugin bietet in Sachen Optik und Funktionalität eine 1:1-Kopie des Ghost-Editors für WordPress.

Im Oktober letzten Jahres hat die erste öffentliche Version von Ghost das Licht der Welt erblickt. Schon im Vorfeld haben besonders das minimalistische Design und der Markdown-Editor großen Eindruck gemacht. Wenn dir die Funktionalität von nicht ausreicht und du vor Node.js zurückschreckst oder dein Herz nur für schlägt, du dich aber in die schlanke und schicke Admin-Oberfläche von Ghost verliebt hast, dann ist Gust ein , das du dir nicht entgehen lassen solltest.

Gust ist ein WordPress-Plugin, das das Look & Feel von Ghost in deine WordPress-Installation bringt. Hierbei bietet Gust einen eigenen Login-Screen und einen Markdown-Editor inklusive Medienupload und Tagging-Funktion. Natürlich ist Gust ebenfalls für Responsive Webdesign und zur Nutzung auf allen Geräteklassen geeignet.

Anders als vergleichbare Plugins wie Splitdown fügt sich Gust nicht in das bestehende WordPress-Backend ein, sondern bietet ein eigenes Backend, das parallel zum „klassischen“ WordPress-Backend betrieben werden kann. Nach der Installation des Plugins und Aktivierung im WordPress-Editor ist Gust unter einer separaten URL (http://www.deineseite.de/gust) verfügbar.

Gust: Ghost Feeling für WordPress-Fans

Gust bietet ist eine gute Kopie des Look & Feel des Ghost-Interface und macht deine WordPress-Installation ein bisschen mehr zu dem, was Ghost eigentlich sein wil: einfach nur ein Blog. Brauchst du mehr Funktionen oder Einstellungsmöglichkeiten, kannst du jederzeit zwischen Gust- und WordPress-Backend wechseln.

Gust Plugin Editor
Gust Plugin Editor. (Screenshot: Gust)

Insofern ist Gust ein guter, optionaler Ersatz für den klassischen WordPress-Editor und bietet neue Möglichkeiten in der Bearbeitung, ohne auf die vielfältigen Funktionen von WordPress verzichten zu müssen.

Auf der Plugin-Seite von Gust erfährst du mehr über das Plugin und kannst dir das Ghost-Feeling auch für deine WordPress-Seite holen.

Werdet ihr Gust einsetzen?

via wpletter.de

]]>
Ilja Zaglov