{"id":1351,"date":"2018-07-08T13:13:44","date_gmt":"2018-07-08T11:13:44","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=1351"},"modified":"2018-11-09T06:23:47","modified_gmt":"2018-11-09T05:23:47","slug":"custom-post-type-kochbuch-das-feintuning-mit-custom-taxonomies","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2018\/07\/08\/custom-post-type-kochbuch-das-feintuning-mit-custom-taxonomies\/","title":{"rendered":"Custom Post Type Kochbuch: das Feintuning, mit Custom Taxonomies"},"content":{"rendered":"<h2>Verwendung des Excerpts\/Auszugs<\/h2>\n<p>Zuallererst m\u00f6chte ich einstellen, dass man bei den Kochb\u00fcchern in der Blog View nicht den ganzen Inhalt angezeigt bekommt, der ist n\u00e4mlich im Zweifelsfall recht lang, und ausserdem mit mehreren gro\u00dfformatigen Bildern versehen. Daf\u00fcr gibt es in WordPress die Funktion des Auszugs (Engl. Excerpt), damit kann man einen kurzen Einf\u00fchrungstext erstellen, der dann z.B. in der Liste der Suchergebnisse statt dem ganzen Beitrag angezeigt wird. Den Auszug hatten wir in unserer Post-Type-Definition aus dem vorigen Beitrag noch nicht mit drin, das ist aber schnell nachgeholt. Wir erg\u00e4nzen in der functions.php unseres Childthemes die Post-Type-Definition wie folgt:<\/p>\n<pre>function post_type_kochbuch() {\r\n\u00a0\u00a0 \u00a0register_post_type(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'kochbuch',\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 array(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'label' =&gt; __('Kochbuch'),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'public' =&gt; true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'show_ui' =&gt; true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'supports' =&gt; array(\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0'title',\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0'editor',\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<span style=\"color: #ff0000;\">'excerpt',<\/span>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'post-thumbnails',\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'custom-fields',\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'revisions')\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 )\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 );\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 \u00a0\r\n}<\/pre>\n<p>Damit wird im Beitragseditor unter dem Content-Feld jetzt das Feld Auszug mit angezeigt, und wir k\u00f6nnen einen Kurztext eingeben. Wie und wo \u00fcberall der angezeigt wird ist vom Theme abh\u00e4ngig, ich arbeite hier mit einem Child von Twenty Twelve, da geht man es so an:<\/p>\n<p>Daf\u00fcr klemmt man sich die content.php und legt eine Kopie ins ChildTheme-Verzeichnis. Dann macht man sich auf die Suche nach der Codezeile:<\/p>\n<pre>&lt;?php if ( is_search() ) : \/\/ Only display Excerpts for Search ?&gt;<\/pre>\n<p>Die \u00e4ndert man wie folgt:<\/p>\n<pre>&lt;?php if ( is_search() || is_home() ) : \/\/ Display Excerpts for Search and Homepage ?&gt;<\/pre>\n<p>Und schon tauchen auf der Kochb\u00fccher-Seite nur noch die Titel und die Ausz\u00fcge auf. Kleiner Pferdefu\u00df: das gilt jetzt auch f\u00fcr die Rezepte-Blogseite, auch dort werden nur noch Titel und Excerpts(falls vorhanden) angezeigt &#8211; ist mir aber ganz recht so, ich finde das wesentlich \u00fcbersichtlicher. Ich schau aber mal, ob ich da noch eine genauere Steuerungsm\u00f6glichkeit finde.<\/p>\n<h2>Kategorien und Schlagw\u00f6rter f\u00fcr die Kochb\u00fccher<\/h2>\n<p>Daf\u00fcr legen wir uns zwei Custom Taxonomies an, die nur f\u00fcr den Post Type Kochbuch gelten. Das ist nicht weiter kompliziert, hier der Eintrag f\u00fcr die functions.php:<\/p>\n<pre>function kochbuch_create_my_taxonomy() {\r\n\r\n\u00a0\u00a0\u00a0 register_taxonomy(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: #ff0000;\">'land'<\/span>,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: #008000;\">'kochbuch'<\/span>,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 array(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'label' =&gt; __( <span style=\"color: #ff0000;\">'Land'<\/span> ),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'rewrite' =&gt; array( 'slug' =&gt; <span style=\"color: #ff0000;\">'land'<\/span> ),\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0'query_var' =&gt; <span style=\"color: #ff0000;\">'land'<\/span>,\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0'show_ui' =&gt; true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'hierarchical' =&gt; true,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 )\r\n\u00a0\u00a0\u00a0 );\r\n\u00a0\u00a0 \u00a0\u00a0 register_taxonomy( \r\n\u00a0\u00a0 \u00a0\u00a0 <span style=\"color: #ff0000;\">'kochbuch-stichwort'<\/span>, \r\n\u00a0\u00a0 \u00a0\u00a0 <span style=\"color: #008000;\">'kochbuch'<\/span>,\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0array(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'hierarchical' =&gt; false,\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 'label' =&gt; __(<span style=\"color: #ff0000;\">'Kochbuch-Stichwort'<\/span>),\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 'query_var' =&gt; <span style=\"color: #ff0000;\">'kochbuch-stichwort'<\/span>,\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 'show_ui' =&gt; true,\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 'rewrite' =&gt; array('slug' =&gt; <span style=\"color: #ff0000;\">'kochbuch-stichwort'<\/span> )\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0)\r\n\u00a0\u00a0 \u00a0);\r\n}\r\nadd_action( 'init', 'kochbuch_create_my_taxonomy' );<\/pre>\n<p><span style=\"color: #ff0000;\">Rot markiert<\/span> sind die Eintr\u00e4ge f\u00fcr die Benennungen und die Slugs der jeweiligen Taxonomie. <span style=\"color: #008000;\">Die gr\u00fcn markierte Option &#8218;kochbuch<\/span>&#8218; am oberen Ende der Taxonomie-Definition sorgt daf\u00fcr, da\u00df die Taxonomie auch nur f\u00fcr den Post Type Kochbuch herangezogen wird. Der einzige Unterschied zwischen den beiden Taxonomien ist, dass ich f\u00fcr die Land-Taxonomie &#8218;hierarchical&#8217;=&gt;true eingestellt habe, das erlaubt eine Schachtelung der L\u00e4nder. F\u00fcr die Kochbuch-Stichworte steht hierarchical =&gt; false, das ergibt eine Ebene wie man es von den Stichworten in Worpress gewohnt ist.<\/p>\n<p>Das sollte schon gen\u00fcgen, um unsere Custom Taxonomies funktional zu machen:<\/p>\n<div id=\"attachment_1355\" style=\"width: 1258px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-1355\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1355\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/07\/custom_taxonomies.jpg\" alt=\"custom_taxonomies\" width=\"1248\" height=\"642\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/07\/custom_taxonomies.jpg 1248w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/07\/custom_taxonomies-300x154.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/07\/custom_taxonomies-768x395.jpg 768w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/07\/custom_taxonomies-1024x527.jpg 1024w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/07\/custom_taxonomies-624x321.jpg 624w\" sizes=\"(max-width: 1248px) 100vw, 1248px\" \/><p id=\"caption-attachment-1355\" class=\"wp-caption-text\">custom_taxonomies<\/p><\/div>\n<p>Ich hatte \u00fcbrigens beim Testen am Anfang das Problem, dass neue Taxonomie-Eintr\u00e4ge sich nicht abspeichern liessen. Die Ursache war ein Plugin-Konflikt! Ich hatte auf der Testumgebung noch einen Haufen experimentelle Plugins am Laufen, die hab ich deaktiviert, dann hat es ganz normal funktioniert. Die Wurzel des Problems war anscheinend eine Schlamperei meinerseits, ich hatte in einigen Plugins vor dem \u00f6ffnenden &lt;?php-Tag Whitespaces drin, das mag WordPress gar nicht, da gibt es die bekannte Meldung &#8222;Das Plugin verursachte X Zeichen unerwartete Ausgabe&#8230;&#8220;<\/p>\n<h2>Wie man die neuen Taxonomien ins Template einf\u00fcgt<\/h2>\n<p>Das h\u00e4ngt wieder ziemlich vom Theme ab, da muss man ein bisschen rumprobieren. Die Taxonomie Land bekommt man mit folgender Codezeile:<\/p>\n<pre>&lt;div class=\"entry-meta\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;?php echo get_the_term_list( $post-&gt;ID, <span style=\"color: #ff0000;\">'land'<\/span>, 'Rezepte aus aller Welt: ', ', ', '' ); ?&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/div&gt;<\/pre>\n<p>Ich hab da gleich mal die div class= &#8222;entry meta&#8220; mitgenommen, damit die Formatierung wie bei den WordPress-Standardkategorien ausf\u00e4llt. Die Codezeile kommt in die content.php ins Child-Theme, und zwar zwischen dem Block f\u00fcr den entry-content und dem footer:<\/p>\n<pre>&lt;\/div&gt;&lt;!-- .entry-content --&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;?php endif; ?&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<span style=\"color: #008000;\">&lt;div class=\"entry-meta\"&gt;<\/span>\r\n<span style=\"color: #008000;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;?php echo get_the_term_list( $post-&gt;ID, 'land', 'Rezepte aus aller Welt: ', ', ', '' ); ?&gt;<\/span>\r\n<span style=\"color: #008000;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<\/span>\r\n<span style=\"color: #008000;\">\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/div&gt;<\/span>\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;footer class=\"entry-meta\"&gt;<\/pre>\n<p>In der Blogansicht sieht das dann so aus:<\/p>\n<div id=\"attachment_1356\" style=\"width: 478px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-1356\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1356\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/07\/land_anzeige.jpg\" alt=\"land_anzeige\" width=\"468\" height=\"224\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/07\/land_anzeige.jpg 468w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/07\/land_anzeige-300x144.jpg 300w\" sizes=\"(max-width: 468px) 100vw, 468px\" \/><p id=\"caption-attachment-1356\" class=\"wp-caption-text\">land_anzeige<\/p><\/div>\n<p>Und so sieht es aus, wenn man auch noch die Stichworte an der selben Position ausgibt:<\/p>\n<pre>&lt;div class=\"entry-meta\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;?php echo get_the_term_list( $post-&gt;ID, '<span style=\"color: #ff0000;\">land<\/span>', 'Rezepte aus aller Welt: ', ', ', '' ); ?&gt;&lt;br&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;?php echo get_the_term_list( $post-&gt;ID, '<span style=\"color: #ff0000;\">kocbuch-stichwort<\/span>', 'Stichworte: ', ', ', '' ); ?&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/div&gt;<\/pre>\n<p>(im kocbuch-Stichwort ist ein Schreibfehler, bitte ignorieren)<\/p>\n<h2>Nicht vergessen: Permalinks updaten!<\/h2>\n<p>Sonst kriegt man die 404-Meldung, wenn man auf einen der Taxonomy-Eintr\u00e4ge klickt. Unser Endergebnis sieht jetzt in der Blog-Ansicht so aus:<\/p>\n<div id=\"attachment_1360\" style=\"width: 477px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-1360\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1360\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/07\/blogview_kochbuch-1.jpg\" alt=\"blogview_kochbuch\" width=\"467\" height=\"495\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/07\/blogview_kochbuch-1.jpg 467w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2018\/07\/blogview_kochbuch-1-283x300.jpg 283w\" sizes=\"(max-width: 467px) 100vw, 467px\" \/><p id=\"caption-attachment-1360\" class=\"wp-caption-text\">blogview_kochbuch<\/p><\/div>\n<p>Wir haben: den Titel, den Excerpt, die L\u00e4nder und die Stichworte. Pa\u00dft!<\/p>\n<p>Jetzt m\u00f6chte ich noch gern meinen neuen Post Type Kochbuch in einem Widget &#8222;Die neuesten Kochb\u00fccher&#8220; ausgeben, und die Kochbuch-L\u00e4nder ebenfalls, aber dazu gibt es einen neuen Beitrag.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Verwendung des Excerpts\/Auszugs Zuallererst m\u00f6chte ich einstellen, dass man bei den Kochb\u00fcchern in der Blog View nicht den ganzen Inhalt angezeigt bekommt, der ist n\u00e4mlich im Zweifelsfall recht lang, und ausserdem mit mehreren gro\u00dfformatigen Bildern versehen. Daf\u00fcr gibt es in WordPress die Funktion des Auszugs (Engl. Excerpt), damit kann man einen kurzen Einf\u00fchrungstext erstellen, der [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23,48,42,22,2,59],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1351"}],"collection":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/comments?post=1351"}],"version-history":[{"count":7,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1351\/revisions"}],"predecessor-version":[{"id":1364,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1351\/revisions\/1364"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=1351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=1351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=1351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}