Tworzenie szablonów-skryptów w Wordpressie
Dość często zachodzi potrzeba zaprezentowania na stronie treści w jakiejś nietypowej formie. Na przykład chcemy dodać sporą ilość przepisów i chcielibyśmy mieć automatycznie tworzoną ich listę, czy oddzielny szablon dla przepisu. W CMSach zazwyczaj tworzy się nowy moduł, w Wordpressie można użyć "Stron" oraz dodatkowych szablonów w skórce. W tym artykule zaprezentuję różne formy tworzenia własnych szablonów-skryptów skórek Wordpressa. Znajomość PHP jest wymagana.
Możliwości stron w Wordpressie
Strony w Wordpressie posiadają szereg dodatkowych funkcjonalności. Dla każdej strony możemy wybrać własny szablon:Szablon to plik PHP z odpowiednim kodem znajdujący się w katalogu skórki. Określa on co i jak jest wyświetlane (i jak wygląda). Za pomocą kodu PHP można tworzyć praktycznie dowolną zawartość i funkcjonalność takiej strony (np. generować spis wpisów, podstron itd.).
Strony można przypisywać do już istniejącej podając "Rodzica". Przydaje się to gdy chcemy np. stworzyć jedną stronę jako kategorię i wiele jako jej zawartość (np. przepisy w danej kategorii). Jak wykorzystamy w szablonach ten układ zależy od nas. Przykład zaraz zaprezentuję.
Skórki i szablony
Skórki Wordpressa znajdują się w katalogu wp-content/themes/. Przykładowo w domyślnej skórce "twentyeleven" znajdziemy szablon "showcase.php" zawierający sporo przykładowego kodu. Najprostszy szkielet szablonu strony wyglądałby tak:
<?php
/**
* Template Name: Testowy
*/
get_header(); ?>
<div id="primary" class="showcase">
<div id="content" role="main">
// tutaj nasza zawartość
</div><!-- #content -->
</div><!-- #primary -->
<?php get_footer(); ?>
Przykładowe szablony-skrypty
Oto przykładowy szablon wyświetlający listę z ze stronami przypisanymi do danej strony:<?php
/*
Template Name: Katalog stron podrzędnych
*/
?>
<?php get_header(); ?>
<div id="post-content"><div class="post-entry clearfix">
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1 class="page-title"><?php the_title(); ?></h1>
<?php the_content(); ?>
<?php
$my_wp_query = new WP_Query();
$all_wp_pages = $my_wp_query->query(array('post_type' => 'page', 'nopaging' => True, 'orderby' => 'title', 'order' => 'ASC'));
$x = get_page_children( $page_id, $all_wp_pages );
print '<ul>';
foreach($x as $k)
{
print '<li><a href="/?page_id='.$k->ID.'">'.$k->post_title.'</a></li>';
}
print '</ul>';
?>
<?php endwhile; ?>
<?php endif; ?>
</div>
</div>
<!-- END post-content -->
<?php get_sidebar(); ?>
<div class="clear"></div>
<?php get_footer(); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
Po tym wywołaniu możemy wyświetlić poszczególne elementy strony jak np. jej tytuł i treść: the_title i the_content. Funkcje te są opisane na wiki wordpressa. Klasa WP_Query służy do wykonywania zapytań, pobierania treści. Funkcja get_page_children zwróci listę stron dzieci względem obecnej strony (o danym ID - $page_id).
W stronach mamy też zakładkę "Własne pola", gdzie możemy podawać dodatkową treść. Np. możemy podać link do kanału RSS pod nazwą "rss", czy np. jakieś specyficzne elementy treści, które następnie wykorzystamy w szablonie. By dostać się do wartości taga strony wystarczy użyć:
<?php
$value = get_post_meta(get_the_id(), 'NAZWA_POLA', true);
Gdzie "get_the_id" to ID obecnej strony (pobieramy element meta dla wskazanej przez ID strony). Jeżeli byłby to link do kanału RSS to możemy następnie użyć SimpleXML, a jeżeli coś prostszego jak treść - to wyświetlić ją w wybranym miejscu szablonu.
Można także wykorzystać tagi jakie mogą być przypisane do wpisów. Możemy wyświetlić wpisy, które są oznaczone tagiem o identycznej nazwie co nazwa strony:<?php
/*
Template Name: Powiązane newsy
*/
?>
<?php get_header(); ?>
<div id="post-content"> <div class="post-entry clearfix">
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1 class="page-title"><?php the_title(); ?></h1>
<?php the_content(); ?>
<?php
$args = array();
$args['name__like'] = get_the_title();
$tag = get_tags($args);
if ($tag and count($tag) > 0)
{
$posts = new WP_Query();
$x = $posts->query("tag={$tag[0]->slug}&showposts=10");
print '<h3>Ostatnie powiązane wpisy</h3><ul>';
foreach($x as $n)
{
print '<li><a href="./?p='.$n->ID.'">'.$n->post_title.'</a></li>';
}
print '</ul>';
print '<a href="./?tag='.$tag[0]->slug.'"><b>Zobacz wszystkie</b></a>';
}
?>
<?php endwhile; ?>
<?php endif; ?>
</div>
<?php comments_template(); ?>
</div>
<!-- END post-content -->
<?php get_sidebar(); ?>
<div class="clear"></div>
<?php get_footer(); ?>
Comment article