{"id":230353,"date":"2022-12-08T17:31:00","date_gmt":"2022-12-08T14:31:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230353"},"modified":"2022-12-07T11:57:32","modified_gmt":"2022-12-07T08:57:32","slug":"anpassad-wordpress-kategoriredigeringssida","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/anpassad-wordpress-kategoriredigeringssida\/","title":{"rendered":"Anpassad WordPress-kategoriredigeringssida"},"content":{"rendered":"\n<p>Att l\u00e4gga till ytterligare metaboxar, f\u00e4lt och annan information till WordPress \u00e4r enkelt om du k\u00e4nner till de r\u00e4tta krokarna och de r\u00e4tta API:erna att f\u00f6lja. Men vad h\u00e4nder om du vill l\u00e4gga till information till en WordPress taxonomisida?<\/p>\n<p>S\u00e4g till exempel att du vill skapa en anpassad WordPress-kategoriredigeringssida eller \u00e5tminstone l\u00e4gga till lite anpassad information p\u00e5 en taxonomisida?<\/p>\n<p>Det \u00e4r fortfarande m\u00f6jligt att g\u00f6ra det, och det \u00e4r fortfarande relativt enkelt men, \u00e5terigen, du m\u00e5ste k\u00e4nna till de r\u00e4tta krokarna att anv\u00e4nda, och det beror ocks\u00e5 p\u00e5 om du arbetar med de inbyggda taxonomierna eller en anpassad taxonomi.<\/p>\n<p>F\u00f6r det h\u00e4r inl\u00e4gget kommer jag att visa hur man g\u00f6r detta med hj\u00e4lp av en anpassad, hierarkisk taxonomi (eller, i enklare termer, en anpassad kategori).<\/p>\n<h2>Anpassad WordPress-kategoriredigeringssida<\/h2>\n<p>F\u00f6r det f\u00f6rsta, om du v\u00e4ljer att arbeta med en standardkategorisida kommer du sannolikt att se n\u00e5got i stil med detta:<\/p>\n<p>Och de tv\u00e5 krokarna som du m\u00e5ste arbeta med \u00e4r:<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/edit_category_form\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">edit_category_form<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/category_edit_form\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kategori_redigera_formul\u00e4r<\/a><\/strong><\/li>\n<\/ul>\n<p>Om du har klickat p\u00e5 n\u00e5gon av l\u00e4nkarna kommer du att m\u00e4rka att den senare inte har n\u00e5gon information men den f\u00f6rra lyder:<\/p>\n<blockquote>\n<p>Handlingen\/kroken edit_category_form kan anv\u00e4ndas f\u00f6r att utf\u00f6ra ytterligare \u00e5tg\u00e4rder p\u00e5 sk\u00e4rmen f\u00f6r redigering av kategori. Du kan till exempel l\u00e4gga till formul\u00e4rf\u00e4lt f\u00f6r att spara ytterligare information f\u00f6r en viss kategori.<\/p>\n<\/blockquote>\n<p>F\u00f6r det \u00e4ndam\u00e5let v\u00e4ljer jag i allm\u00e4nhet att anv\u00e4nda den kroken eftersom den \u00e4r v\u00e4ldefinierad i Codex. I det h\u00e4r inl\u00e4gget \u00e4r jag dock bara bekymrad \u00f6ver att \u00e5terge information \u2013 inte med att l\u00e4gga till ytterligare f\u00e4lt som beh\u00f6ver sparas.<\/p>\n<h3>Koppla upp saker och ting<\/h3>\n<p>I den enklaste formen \u00e4r det b\u00e4sta s\u00e4ttet att b\u00f6rja l\u00e4gga till anpassad information till den h\u00e4r typen av sida att skapa en funktion och bifoga den till kroken som anges ovan. I sin mest grundl\u00e4ggande form ser detta ut ungef\u00e4r <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-00-acme-display-object-ids-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nadd_action('edit_category_form', 'acme_display_object_ids');\n\/**\n * Displays an ordered list of all of the object IDs for a given\n * taxonomy.\n *\/\nfunction acme_display_object_ids()\n{\n  \/\/ Code for displaying the Object IDs goes here.\n}<\/code><\/pre>\n<p>Men om du g\u00e5r den objektorienterade v\u00e4gen kan du v\u00e4lja att ha en klass som accepterar en krok som ett argument i konstruktorn och lyssnar efter att h\u00e4ndelsen avfyras. Om s\u00e5 \u00e4r fallet kan din kod se <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-01-object-id-subscriber-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ut s\u00e5 h\u00e4r:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nclass ObjectIdSubscriber\n{\n    \/**\n     * @var string the hook to which this class subscribes\n     *\/\n    private $hook;\n\n    \/**\n     * @param string $hook the hook to which this class is registered with WordPress\n     *\/\n    public function __construct(string $hook)\n    {\n      $this-&gt;hook = $hook;\n    }\n\n    \/**\n     * Renders all of the information for the object IDs.\n     *\/\n    public function load()\n    {\n        \/\/ Code for displaying the Object IDs goes here.\n    }\n}<\/code><\/pre>\n<p>Oavsett, po\u00e4ngen \u00e4r att du m\u00e5ste ha en klass eller en funktion som \u00e4r kopplad till en krok som \u00e5terger information n\u00e4r sk\u00e4rmen visas.<\/p>\n<h3>Visar information<\/h3>\n<p>H\u00e4rifr\u00e5n kommer du att beh\u00f6va n\u00e5got att \u00e5terge. Jag \u00e4r ett fan av att h\u00e5lla min logik \u00e5tskild, s\u00e5 jag brukar skapa en <strong>View-<\/strong> katalog och sedan placera de partiella filerna f\u00f6r vyerna i den katalogen.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162303-61e73af3dd69a.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162303-61e73af3dd69a.png\" alt=\"Anpassad WordPress-kategoriredigeringssida\" ><\/a><\/p>\n<p>Naturligtvis kan du alltid bygga str\u00e4ngen HTML i PHP-funktionen (men se till att du sanerar utdata med n\u00e5got som <strong><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_kses\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_kses<\/a><\/strong> ).<\/p>\n<p>F\u00f6r det h\u00e4r exemplet ska jag h\u00e5lla det enkelt: jag vill bara dra en lista \u00f6ver alla inl\u00e4gg (eller objekt, som du kommer att se f\u00f6r en stund) fr\u00e5n databasen och lista informationen p\u00e5 sidan. F\u00f6r att g\u00f6ra detta beh\u00f6ver jag ett par databasfr\u00e5gor, och sedan kan jag iterera genom listan med resultat.<\/p>\n<p>F\u00f6rst beh\u00f6ver jag en fr\u00e5ga som kommer att h\u00e4mta <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-02-term-taxonomy-id-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">term_taxonomi_id<\/a><\/strong> fr\u00e5n den givna kategorin:<\/p>\n<pre><code>&lt;?php\n\n\/\/ This will retrieve all of the term relationships from where we can get post IDs.\nglobal $wpdb;\n$termTaxonomyId = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"\n        SELECT DISTINCT term_taxonomy_id\n        FROM $wpdb-&gt;term_taxonomy\n        WHERE term_id = %s\n        \",\n        $tagId\n    ),\n    ARRAY_A\n);\n$termTaxonomyId = isset($termTaxonomyId[0])? $termTaxonomyId[0]: null;\nif (null === $termTaxonomyId) {\n    return null;\n}<\/code><\/pre>\n<p>Sedan m\u00e5ste jag h\u00e4mta en lista \u00f6ver alla <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-03-object-ids-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">objekt-ID<\/a><\/strong> :n som \u00e4r relaterade till detta <strong>term_taxonomi_id<\/strong> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ This will retrieve all of the post IDs.\n$postIds = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"\n        SELECT object_id\n        FROM $wpdb-&gt;term_relationships\n        WHERE term_taxonomy_id = %s\n        \",\n        $termTaxonomyId\n    ),\n    ARRAY_A\n);\nif (empty($postIds)) {\n    return null;\n}<\/code><\/pre>\n<p>H\u00e4rifr\u00e5n kan jag sedan anv\u00e4nda den ursprungliga funktionen (eller klassen) som jag skapade tidigare f\u00f6r att <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-04-render-data-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e5terge informationen<\/a><\/strong> :<\/p>\n<pre><code>&lt;ul&gt;\n&lt;?php foreach ($postIds as $postId): ?&gt;\n  &lt;li&gt;&lt;?php echo $postId; ?&gt;&lt;\/li&gt;\n&lt;?php endforeach; ?&gt;\n&lt;\/ul&gt;<\/code><\/pre>\n<p>Men det finns massor av ytterligare saker du kan g\u00f6ra d\u00e4rifr\u00e5n.<\/p>\n<h2>Det finns mer<\/h2>\n<p>Som n\u00e4mnts returnerar detta ID:n f\u00f6r objekten som i huvudsak \u00e4r post-ID:n (eller sid-ID:n eller anpassade posttyp-ID:n eller vad som helst fr\u00e5n <strong>wp_posts-<\/strong> tabellen).<\/p>\n<p>N\u00e4r du har den informationen kan du h\u00e4mta all information som titel, inneh\u00e5ll, metadata, olika datuminformation och s\u00e5 vidare.<\/p>\n<p>Meningen med inl\u00e4gget \u00e4r dock inte att visa vilken information som ska h\u00e4mtas utan hur man h\u00e4mtar information f\u00f6r en given taxonomi och sedan renderar den p\u00e5 en anpassad WordPress-kategorisida. Och det h\u00e4r \u00e4r ett enkelt s\u00e4tt att g\u00f6ra exakt det.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Meningen med inl\u00e4gget \u00e4r dock inte att visa vilken information som ska h\u00e4mtas utan hur man h\u00e4mtar information f\u00f6r en given taxonomi och sedan renderar den p\u00e5 en anpassad WordPress-kategorisida.<\/p>\n","protected":false},"author":1,"featured_media":235442,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[901,807,724,868],"tags":[1173],"class_list":["post-230353","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-koda","category-php-9","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230353","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=230353"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230353\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/235442"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}