Alle Artikel zum Thema “Themes”

Custom Post Types und Taxonomien

Vom 10.08.2011

Manchmal mag es recht nützlich sein, einen Custom Post Type anzulegen, der dann auch noch verschiedene Eigenschaften hat.

Das geht recht komfortabel über ein Plugin namens Custom Post Type UI , das sowohl das Anlegen des Custom Post Types als auch der dazu gehörigen Taxonomien einfach macht. Wenn man aber sicher gehen möchte, dass auch ohne den Einsatz eines Plugins der Custom Post Type vorhanden ist, kann man den auch durch einen Eintrag in der functions.php seines Themes erstellen.

function post_type_distributors() {
	register_post_type(
                'distributoren',
                array(
                    'label' => __('Distributoren'),
                    'public' => true,
                    'show_ui' => true,
                    'supports' => array(
					'title',
					'editor'
                     )
                )
        );

       register_taxonomy( 'regionen', 'distributoren',
		array(
             'hierarchical' => true,
			 'label' => __('Regionen'),
			 'query_var' => 'regionen',
			 'rewrite' => array('slug' => 'regionen' )
		)
	);

	register_taxonomy( 'branchen', 'distributoren',
		array(
             'hierarchical' => true,
			 'label' => __('Branchen'),
			 'query_var' => 'branchen',
			 'rewrite' => array('slug' => 'branchen' )
		)
	);

}
add_action('init', 'post_type_distributors');

3 Level WordPress Menu

Vom 21.07.2011

Sicherlich könnte ein geübter Programmierer hier eine elegantere Lösung finden aber für meine Zwecke tut dieser Code genau, was er soll.

Ausgangsvoraussetzung: Ich habe eine WordPress-Seite mit drei Menüleveln.

Diese Grafik zeigt, welche Fälle es gibt und wie die Menüs sich verhalten sollen. In meinem Fall sollten die Menüs syntaktisch voneinander getrennt sein, also jedes Menülevel in einem eigenen “Code-Block”, der sich dann per CSS individuell stylen lässt.

CODE:

Nun zum Interessanten! Ein Teil des Codes muss nun in die Theme-Datei an die Stelle, an der das Menü auftauchen soll. Das könnte z.B. die header.php sein oder auch die sidebar.php.

<?php
	//Automatic Submenu
    global $wp_query;
 	//Wenn die Seite ein Grandparent ist, also keine Eltern hat...
    if( empty($wp_query->post->post_parent) )
      {
     		//Herausfinden ob es Kinder gibt...
			$ich=$wp_query->post->ID;
			$children = wp_list_pages("title_li=&child_of=$ich&echo=0");
				if ($children)
				{
					$parent1 = $wp_query->post->ID;
					//Menue ausgeben
					echo "<ul class='submenus'>";
					wp_list_pages("title_li=&child_of=$parent1&depth=1");
					echo "</ul>";
				}
     } 

    else
	//hat Eltern, ist also ein parent
     {
		$ich=$wp_query->post->ID;
		$children = wp_list_pages("title_li=&child_of=$ich&echo=0");
		//UND hat weitere Kinder
		if ($children)
		{
			$parent1 = $wp_query->post->post_parent;
			//MENUE 1 mit Geschwistern aktueller Seite (Kinder von $parent1)
			echo "<ul class='submenus'>";
			wp_list_pages("title_li=&child_of=$parent1&depth=1");
			echo "</ul>";

			$parent2 = $wp_query->post->ID;
			//Menue 2 mit Kindern aktueller Seite ($parent2)
			echo "<ul class='subsubmenu'>";
			wp_list_pages("title_li=&child_of=$parent2&depth=1");
			echo "</ul>";

		}
		else
		{
				if(get_grandpapa())
				{
					$parent1 = get_grandpapa();
					//MENUE 1 mit Geschwistern aktueller Seite (Kinder von $parent1)
					echo "<ul class='submenus'>";
					wp_list_pages("title_li=&child_of=$parent1&depth=1");
					echo "</ul>";

					$parent2 = $wp_query->post->post_parent;
					//Menue 2 mit Kindern aktueller Seite ($parent2)
					echo "<ul class='subsubmenu'>";
					wp_list_pages("title_li=&child_of=$parent2&depth=1");
					echo "</ul>";
				}
				else
				{
					$parent1 = $wp_query->post->post_parent;
					//NUR Menue 1 mit Geschwistern aktueller Seite (Kinder von $parent1)
					echo "<ul class='submenus'>";
					wp_list_pages("title_li=&child_of=$parent1&depth=1");
					echo "</ul>";
				}
		}
	}

	?>

Zusätzlich habe ich noch einen Schnipsel Code, den ich bei Stackxchange gefunden habe in die functions.php eingebaut.

//Three levels of hell... get ID of grandparent page
function get_grandpapa($page_id){
    $current_page = get_page( $page_id );
    if ($current_page->post_parent > 0){
        //has at least a parent
        $parent_page = get_page($current_page->post_parent);
        if ($parent_page->post_parent > 0){
            return $parent_page->post_parent;
        }else{
            return false;
        }
    }
    return false;
}

Dieser Schnipsel findet die ID der Großvaterseite heraus. So kann diese als Startpunkt für die Darstellung des Menüs verwendet werden.

Das war der ganze Zauber. So lässt sich WordPress als CMS nutzen.



Posts aus einer Kategorie auf einer Seite listen

Vom 28.05.2011

Dieses Problem stellt sich mir immer und immer wieder. Ich möchte eine Seite namens “NEWS” haben, die sich nahtlos in mein WordPress CMS einfügt. Auf dieser Seite sollen nun meine News-Posts angezeigt werden.

Du Dummi, werden jetzt einige WordPress-Freaks sagen. Du kannst doch einfach die Kategorie anzeigen lassen. Seit den neuen Custom Menüs in WordPress kann man ja nun auch Kategorien einfach in das Menü einfügen und anzeigen lassen. Natürlich geht das. Es gibt auch einige Plugins, die ich schon probiert habe. Einen kleinen Beitrag dazu habe ich hier geschrieben Query Posts und Shortcode Any Widget benutzen um Posts auf einer Seite anzuzeigen. (<– das funktioniert) oder auch das Pages Posts Plugin sowie List Category Posts Plugin .

Ich habe zumindest einige davon ausprobiert und immer wieder das gleiche Problem gehabt (außer bei Query Posts und Shortcode Any): Es wurde zwar alles fein angezeigt, aber mein Menu-Highlighting ist zum Teufel gegangen. Ebenso haben eventuell eingerichtete Custom Sidebars nicht mehr funktioniert… Also … ein eigenes Template muss her. Eins, das die Seite als Seite belässt (also auch all ihre Eigenschaften) und trotzdem eine Liste der Posts anzeigt.

<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>

        <div class="entry">
          <?php the_content(); ?>
	</div><!--entry-->

      <p class="postmetadata"><?php edit_post_link('bearbeiten'); ?></p>
   <?php endwhile; ?>

 <?php
 //NEWS-Posts anzeigen
	$displayposts = new WP_Query();
	 //get posts from your news category
	 $displayposts->query('cat=1&showposts=3');
	while ($displayposts->have_posts()) : $displayposts->the_post();?>

         <div class="aktuell-beitrag">
		<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php edit_post_link('E', '', ''); ?>	<br />
		<div class="post-date"><?php the_time('d.m.Y') ?></div>

                <?php  the_excerpt(); ?>
	</div>

	<?php endwhile; ?>

  <?php else : ?>
    <h2 class="center">Nicht gefunden</h2>
	<div class="entry">
    <p class="center">Diese Seite wurde leider nicht gefunden. Bitte verwenden Sie die Navigation.</p>
	</div>
  <?php endif; ?>

Das Ganze muss natürlich in ein Page-Template und dann bei der gewünschten Seite ausgewählt werden.

WordPress Custom Post Types und individuelle Templates

Vom 24.05.2011

Seit der Version 2.9. gibt es ja bei WordPress die wunderbaren Custom Post Types. Diese verwende ich z.B. für Referenzen. Dazu kann man den Custom Post Type noch um individuelle Felder erweitern. Z.B. mit Plugins wie Easy Post Type oder More Fields. In meinem Fall würde ich die Referenzen gerne auf eine bestimmte Art und Weise anzeigen lassen und dazu eine ganz individuelle Formatierung verwenden.

Dazu habe ich bei WPTavern den passenden Code-Schnipsel gefunden.

function post_type_add_template() {
$post_type = get_query_var('post_type');
if (!empty($post_type)) {
locate_template(array("{$post_type}.php","index.php"), true);
  exit;
}
}
add_action('template_redirect', 'post_type_add_template'); 

Dieser Code muss in die functions.php eingefügt werden und sucht dann nach einer Theme-Datei, die denselben Namen hat wie der jeweilige Custom Post Type. Wenn ich also wie in meinem Fall den Type “Referenzen” habe, muss ich nur eine Theme-Datei mit Namen “referenzen.php” einfügen und schon ist der Käs gegessen.

Ein echtes Leckerli für WordPress

Vom 28.04.2010

Das scheint mir bei dem soeben entdeckten Elastic Theme Editor der Fall zu sein. Das könnte mir in Zukunft eine Menge Arbeit sparen. Man kann dort einfach per Klick und Drag das Layout eines Themes definieren, den einzelnen Bereichen die Funktionen als Header/Footer/Content zuordnen und hat dann per Klick schon ein fertiges Theme. Nun muss man nur noch die einzelnen Bereiche per CSS Stylen! Scharf!

elastic