{"id":21211,"date":"2022-04-27T22:31:16","date_gmt":"2022-04-27T20:31:16","guid":{"rendered":"https:\/\/notiz.blog\/?p=21211"},"modified":"2023-08-11T12:05:53","modified_gmt":"2023-08-11T10:05:53","slug":"custom-post-type-comment","status":"publish","type":"post","link":"https:\/\/notiz.blog\/2022\/04\/27\/custom-post-type-comment\/","title":{"rendered":"Custom Post Type: Comment"},"content":{"rendered":"\n<p>Eine Leseempfehlung vorweg: &#8222;<a class=\"u-like u-like-of\" href=\"https:\/\/wptavern.com\/yes-comments-are-still-relevant-but-we-need-a-better-system\" data-type=\"URL\" data-id=\"https:\/\/wptavern.com\/yes-comments-are-still-relevant-but-we-need-a-better-system\">Yes, Comments Are Still Relevant, But We Need a Better System<\/a>&#8220; von Justin Tadlock auf WPTavern!<\/p>\n\n\n\n<p>Soziale Netzwerke haben die Art wie wir kommunizieren drastisch ver\u00e4ndert. Wir reagieren selten mit Text, statt dessen liken, re-tweeten, sharen und faven wir was das Zeug h\u00e4lt. Und wenn wir mit Text reagieren, hat dieser sp\u00e4testens seit Twitter, einen anderen Stellenwert. Ein Kommentar ist nicht l\u00e4nger ein St\u00fcck Text unter einem Artikel, ein Kommentar steht f\u00fcr sich alleine und wird durch die Plattform in den richtigen Kontext gesetzt, abh\u00e4ngig vom Einstiegspunkt des lesenden.<\/p>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"523\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" src=\"https:\/\/notiz.blog\/wp-content\/uploads\/2022\/04\/tweet-pfefferle.png\" alt=\"\" class=\"wp-image-21968\"\/><figcaption class=\"wp-element-caption\">Mein Tweet, \u00fcber meine Timeline, mit Depones Antwort<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"438\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" src=\"https:\/\/notiz.blog\/wp-content\/uploads\/2022\/04\/tweet-depone.png\" alt=\"\" class=\"wp-image-21969\"\/><figcaption class=\"wp-element-caption\">Daniels Antwort \u00fcber seine Timeline, mit meinem Tweet als &#8222;Reply-Context&#8220;.<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Die <a href=\"https:\/\/indieweb.org\/\" data-type=\"URL\" data-id=\"https:\/\/indieweb.org\/\">IndieWeb Community<\/a> nennt das einen <a href=\"https:\/\/indieweb.org\/reply-context\" data-type=\"URL\" data-id=\"https:\/\/indieweb.org\/reply-context\">Reply-Context<\/a>.<\/p>\n\n\n\n<p>Diese Art der Darstellung und Handhabung von Reaktionen ist auch in dezentralen Netzwerken sehr popul\u00e4r. Mastodon \u00e4hnelt sehr, dem von Twitter gekauften Tweetdeck und imitiert auch dessen Darstellung. Die IndieWeb Bewegung geht sogar noch einen Schritt weiter und schafft mit <a href=\"https:\/\/indieweb.org\/Webmention\" data-type=\"URL\" data-id=\"https:\/\/indieweb.org\/Webmention\">Webmentions<\/a> eine M\u00f6glichkeit \u00fcber Blog-Posts dezentral zu kommentieren.<\/p>\n\n\n\n<p>Die Kommentar-Funktion von WordPress ist dagegen bald 20 Jahre alt und dementsprechend antiquiert.<\/p>\n\n\n\n<p><strong>Zeit das zu \u00e4ndern!?!<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Custom Post Type<\/h2>\n\n\n\n<p>Ich arbeite seit knapp 15 Jahren daran, WordPress im IndieWeb und Fediverse zu verankern. Das gro\u00dfe Problem ist dabei immer wieder die Persistenz und die Darstellung von Reaktionen. Ich habe mir viele Gedanken gemacht, wie man das Problem beheben und WordPress&#8216; Kommentar System modernisieren k\u00f6nnte, und ende immer an dem Punkt, wo ich versuche die Custom Post Type &#8211; Funktionalit\u00e4t f\u00fcr Kommentare nachzubauen.<\/p>\n\n\n\n<p>Aber warum? Wenn ich eh alles nachbauen m\u00fcsste, w\u00e4re es doch viel sinnvoller direkt Post-Types zu benutzen.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">register_post_type( <span class=\"hljs-string\">'comment'<\/span> );<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Aktuell bildet WordPress Posts, Pages, Attachments, Revisions, Navigation Menus, Custom CSS und Changesets \u00fcber <a href=\"https:\/\/wordpress.org\/support\/article\/post-types\/\" data-type=\"URL\" data-id=\"https:\/\/wordpress.org\/support\/article\/post-types\/\">Custom Post Types<\/a> ab&#8230; Warum also nicht auch Kommentare und andere Reaktionen?<\/p>\n\n\n\n<p>Durch die Gleichsetzung der Datenstruktur von Posts und Comments, lassen sich diese einheitlich und dadurch einfacher verarbeiten und \u00fcber z.B. APIs ausgeben. Gerade ActivityPub macht, wie Twitter, keinen Unterschied zwischen Kommentar, Antwort, Like, Boost oder initialem Text.<\/p>\n\n\n\n<p>Die (Custom-)Post Tabelle bietet \u00fcber <code>post_parent<\/code> schon jetzt die M\u00f6glichkeit komplexe Zusammenh\u00e4nge wie z.B. auch Threaded-Comments abzubilden. \u00dcber den <code>post_status<\/code> lie\u00dfen sich au\u00dferdem Kommentar-Status sowie eine Spam-Behandlung realisieren und <code>commentmeta<\/code> kann komplett in <code>postmeta<\/code> aufgehen.<\/p>\n\n\n\n<p>Neben den klassichen Kommentaren lassen sich aber auch andere Reaktionen umsetzen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Like, Share, &#8230;<\/h2>\n\n\n\n<p>Mit <a href=\"https:\/\/developer.wordpress.org\/themes\/functionality\/post-formats\/\" data-type=\"URL\" data-id=\"https:\/\/developer.wordpress.org\/themes\/functionality\/post-formats\/\">Post-Formats<\/a> hat WordPress ein interessantes Konstrukt um Posts (\u00fcber eine Taxonomy) weiter zu klassifizieren. Was f\u00fcr Posts das <code>aside<\/code>, <code>gallery<\/code>, <code>link<\/code> oder <code>video<\/code> Format ist, k\u00f6nnte f\u00fcr Comments das <code>Like<\/code>, <code>Share<\/code> oder <code>Bookmark<\/code> Format sein.<\/p>\n\n\n\n<p>Themes k\u00f6nnten ihren Support wie folgt definieren:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">add_theme_support( <span class=\"hljs-string\">'comment-formats'<\/span>, <span class=\"hljs-keyword\">array<\/span>( <span class=\"hljs-string\">'like'<\/span>, <span class=\"hljs-string\">'share'<\/span>, <span class=\"hljs-string\">'bookmark'<\/span> ) );<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Und Plugins, wie Webmention oder ActicityPub, k\u00f6nnten neue Formate wie folgt registrieren:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">register_comment_format( string\u00a0$comment_format, <span class=\"hljs-keyword\">array<\/span>|string\u00a0$args\u00a0=\u00a0<span class=\"hljs-keyword\">array<\/span>()\u00a0)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Technisch spricht also nichts dagegen, Custom Post Types auch f\u00fcr Kommentare zu benutzen, man muss eigentlich nur noch alle Kommentar-Funktionen und -Klassen anpassen und fertig!<\/p>\n\n\n\n<p>&#8230;und direkt \u00fcber <code>wpdb<\/code> wird sicherlich eh niemand auf die Kommentar-Tabelle zugreifen! \ud83d\ude09<\/p>\n\n\n\n<p>Spa\u00df beiseite&#8230; Ich mag die Idee wirklich, hab aber bisher noch keinen \u00e4hnlichen Vorschlag im <a href=\"https:\/\/core.trac.wordpress.org\/\" data-type=\"URL\" data-id=\"https:\/\/core.trac.wordpress.org\/\">Trac<\/a> gefunden&#8230; Ob das ein Zeichen ist?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Soziale Netzwerke haben die Art wie wir kommunizieren drastisch ver\u00e4ndert. Wir reagieren selten mit Text, statt dessen liken, re-tweeten, sharen und faven wir was das Zeug h\u00e4lt. Und wenn wir mit Text reagieren, hat dieser sp\u00e4testens seit Twitter, einen anderen Stellenwert. Ein Kommentar ist nicht l\u00e4nger ein St\u00fcck Text unter einem Artikel, ein Kommentar steht f\u00fcr sich alleine und wird durch die Plattform in den richtigen Kontext gesetzt, abh\u00e4ngig vom Einstiegspunkt des lesenden.<\/p>\n","protected":false},"author":1,"featured_media":21960,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[946],"tags":[1153,1080,475,1173,5171,285,994,57],"class_list":{"0":"post-21211","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-wordpress","8":"tag-projekt26","9":"tag-activitypub","10":"tag-comments","11":"tag-custom-post-type","12":"tag-fediblog","13":"tag-twitter","14":"tag-webmention","15":"tag-wordpress","16":"h-entry","17":"hentry"},"_links":{"self":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/21211","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/comments?post=21211"}],"version-history":[{"count":5,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/21211\/revisions"}],"predecessor-version":[{"id":24123,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/21211\/revisions\/24123"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/media\/21960"}],"wp:attachment":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/media?parent=21211"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/categories?post=21211"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/tags?post=21211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}