Custom Post Types sind eine gute Möglichkeit, um in WordPress spezielle, wiederkehrende Artikelmuster zu veröffentlichen. Egal ob es sich um eine DVD-Review mit Bewertungsskala, Kochrezepte oder eine Downloadseite handelt. Custom Post Types können an diversen Stellen einen Sinn ergeben und sind relativ einfach erstellt.
Die Erstellung eines Custom Post Types ist jedoch nur die halbe Miete. Zwar lassen sich nach der Erstellung direkt Artikel im neuen Format erstellen, jedoch werden diese Artikel an diversen Stellen im WordPress-System nicht beachtet. Um Custom Post Types an allen wichtigen Stellen im WordPress-System konsequent einzuführen, sind ein paar Änderungen nötig, die ich nachfolgend kurz erklären will.
Custom Post Types in WordPress Suche aufnehmen
Um Custom Post Types in der normalen WordPress-Suche anzuzeigen, ist es nötig, einen Filter auf die the_search_query-Funktion zu setzen. Dies macht man am besten in der functions.php des jeweiligen Themes.
1 2 3 4 5 |
function custom_type_suche( $query ) { if ( $query->is_search ) { $query->set( 'post_type', array( 'site', 'plugin', 'theme', 'person' )); } return $query; } add_filter( 'the_search_query', 'custom_type_suche' ); |
Nach dem Einfügen des obigen Codes, sollten eure Custom Post Types auch in der WordPress Suche angezeigt werden.
Custom Post Types in RSS-Feed ausgeben
Eine weitere Stelle, an der Custom Post Types standardmäßig nicht auftauchen, ist der RSS-Feed eines WordPress Blogs. Hier schafft ein Filter auf request Abhilfe.
1 2 3 4 5 6 |
function rss_request_filter( $vars ) { if (isset($vars['feed']) && !isset($vars['post_type'])) $vars['post_type'] = array( 'post', 'site', 'plugin', 'theme', 'person' ); return $vars; } add_filter( 'request', 'rss_request_filter' ); |
Um Custom Post Types im RSS-Feed auszugeben ist oben stehender Code in die functions.php des jeweiligen Themes einzufügen.
Custom Post Types im „Auf einen Blick“-Widget anzeigen
Um Artikel, die im Custom Post Type Format verfasst sind, auch im „Auf einen Blick“-Widget im Dashboard des Backends anzeigen zu können, ist etwas mehr Code nötig.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
function wph_right_now_content_table_end() { $args = array( 'public' => true , '_builtin' => false ); $output = 'object'; $operator = 'and'; $post_types = get_post_types( $args , $output , $operator ); foreach( $post_types as $post_type ) { $num_posts = wp_count_posts( $post_type->name ); $num = number_format_i18n( $num_posts->publish ); $text = _n( $post_type->labels->singular_name, $post_type->labels->name , intval( $num_posts->publish ) ); if ( current_user_can( 'edit_posts' ) ) { $num = "<a href='edit.php?post_type=$post_type->name'>$num</a>"; $text = "<a href='edit.php?post_type=$post_type->name'>$text</a>"; } echo '<tr><td class="first num b b-' . $post_type->name . '">' . $num . '</td>'; echo '<td class="text t ' . $post_type->name . '">' . $text . '</td></tr>'; } $taxonomies = get_taxonomies( $args , $output , $operator ); foreach( $taxonomies as $taxonomy ) { $num_terms = wp_count_terms( $taxonomy->name ); $num = number_format_i18n( $num_terms ); $text = _n( $taxonomy->labels->singular_name, $taxonomy->labels->name , intval( $num_terms )); if ( current_user_can( 'manage_categories' ) ) { $num = "<a href='edit-tags.php?taxonomy=$taxonomy->name'>$num</a>"; $text = "<a href='edit-tags.php?taxonomy=$taxonomy->name'>$text</a>"; } echo '<tr><td class="first b b-' . $taxonomy->name . '">' . $num . '</td>'; echo '<td class="t ' . $taxonomy->name . '">' . $text . '</td></tr>'; } } add_action( 'right_now_content_table_end' , 'wph_right_now_content_table_end' ); |
Nun sollten auch die Custom Post Types mitgezählt und ausgewertet werden.