{"id":230946,"date":"2022-12-08T17:35:00","date_gmt":"2022-12-08T14:35:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230946"},"modified":"2022-12-07T11:57:25","modified_gmt":"2022-12-07T08:57:25","slug":"mukautettu-wordpress-kategorian-muokkaussivu","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/mukautettu-wordpress-kategorian-muokkaussivu\/","title":{"rendered":"Mukautettu WordPress-kategorian muokkaussivu"},"content":{"rendered":"\n<p>Metaruutujen, -kenttien ja muiden tietojen lis\u00e4\u00e4minen WordPressiin on helppoa, jos tied\u00e4t oikeat koukut ja oikeat sovellusliittym\u00e4t, joita seurata. Mutta ent\u00e4 jos haluat lis\u00e4t\u00e4 tietoja WordPressin taksonomiasivulle?<\/p>\n<p>Oletetaan esimerkiksi, ett\u00e4 haluat luoda mukautetun WordPress-luokan muokkaussivun tai ainakin lis\u00e4t\u00e4 mukautettuja tietoja taksonomiasivulle?<\/p>\n<p>Se on edelleen mahdollista tehd\u00e4, ja se on edelleen suhteellisen helppoa, mutta j\u00e4lleen kerran, sinun on tiedett\u00e4v\u00e4 oikeat koukut k\u00e4ytett\u00e4v\u00e4ksi, ja se riippuu my\u00f6s siit\u00e4, ty\u00f6skenteletk\u00f6 sis\u00e4\u00e4nrakennettujen taksonomioiden vai mukautetun taksonomian kanssa.<\/p>\n<p>T\u00e4ss\u00e4 viestiss\u00e4 n\u00e4yt\u00e4n, kuinka t\u00e4m\u00e4 tehd\u00e4\u00e4n k\u00e4ytt\u00e4m\u00e4ll\u00e4 mukautettua, hierarkkista taksonomiaa (tai yksinkertaisemmin mukautettua luokkaa).<\/p>\n<h2>Mukautettu WordPress-kategorian muokkaussivu<\/h2>\n<p>Ensinn\u00e4kin, jos p\u00e4\u00e4t\u00e4t ty\u00f6skennell\u00e4 tavallisen luokkasivun kanssa, n\u00e4et todenn\u00e4k\u00f6isesti jotain t\u00e4llaista:<\/p>\n<p>Ja kaksi koukkua, joiden kanssa sinun on ty\u00f6skennelt\u00e4v\u00e4, ovat:<\/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\">category_edit_form<\/a><\/strong><\/li>\n<\/ul>\n<p>Jos olet napsauttanut jompaakumpaa linkki\u00e4, huomaat, ett\u00e4 j\u00e4lkimm\u00e4isess\u00e4 ei ole mit\u00e4\u00e4n tietoa, mutta edellisess\u00e4 lukee:<\/p>\n<blockquote>\n<p>Edit_category_form-toimintoa\/koukkua voidaan k\u00e4ytt\u00e4\u00e4 lis\u00e4toimintojen suorittamiseen luokan muokkausn\u00e4yt\u00f6ss\u00e4. Voit esimerkiksi lis\u00e4t\u00e4 lomakekentti\u00e4 lis\u00e4tietojen tallentamiseksi tietyst\u00e4 luokasta.<\/p>\n<\/blockquote>\n<p>T\u00e4t\u00e4 tarkoitusta varten p\u00e4\u00e4t\u00e4n yleens\u00e4 k\u00e4ytt\u00e4\u00e4 t\u00e4t\u00e4 koukkua, koska se on hyvin m\u00e4\u00e4ritelty Codexissa. T\u00e4ss\u00e4 viestiss\u00e4 olen kuitenkin huolissani vain tietojen hahmontamisesta \u2013 en lis\u00e4\u00e4 tallennettavia kentti\u00e4.<\/p>\n<h3>Johdot asiat yl\u00f6s<\/h3>\n<p>Yksinkertaisimmassa muodossa paras tapa lis\u00e4t\u00e4 mukautettuja tietoja t\u00e4m\u00e4n tyyppisille sivuille on luoda funktio ja liitt\u00e4\u00e4 se yll\u00e4 mainittuun koukkuun. Perusmuodossaan t\u00e4m\u00e4 n\u00e4ytt\u00e4\u00e4 suunnilleen <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\">t\u00e4lt\u00e4:<\/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>Jos kuitenkin k\u00e4yt\u00e4t oliosuuntautunutta reitti\u00e4, voit valita luokan, joka hyv\u00e4ksyy koukun argumenttina konstruktorissa ja kuuntelee tapahtuman k\u00e4ynnistymist\u00e4. Jos n\u00e4in on, koodisi voi n\u00e4ytt\u00e4\u00e4 <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-01-object-id-subscriber-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4:<\/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>Siit\u00e4 huolimatta asia on, ett\u00e4 sinulla on oltava luokka tai toiminto, joka on kytketty koukkuun, joka render\u00f6i tiedot, kun n\u00e4ytt\u00f6 esitet\u00e4\u00e4n.<\/p>\n<h3>Tietojen n\u00e4ytt\u00e4minen<\/h3>\n<p>T\u00e4st\u00e4 eteenp\u00e4in tarvitset jotain hahmonnettavaa. Pid\u00e4n logiikkani erill\u00e4\u00e4n pit\u00e4misest\u00e4, joten luon yleens\u00e4 <strong>View<\/strong> -hakemiston ja sijoitan sitten n\u00e4kymien osittaiset tiedostot kyseiseen hakemistoon.<\/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=\"Mukautettu WordPress-kategorian muokkaussivu\" ><\/a><\/p>\n<p>Tietysti voit aina rakentaa HTML-merkkijonon PHP-funktiossa (mutta varmista, ett\u00e4 puhdistat tulosteen k\u00e4ytt\u00e4m\u00e4ll\u00e4 jotain, kuten <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>T\u00e4ss\u00e4 esimerkiss\u00e4 aion pit\u00e4\u00e4 asian yksinkertaisena: haluan vain vet\u00e4\u00e4 luettelon kaikista viesteist\u00e4 (tai kohteista, kuten n\u00e4et hetken kuluttua) tietokannasta ja listata tiedot sivulla. T\u00e4t\u00e4 varten tarvitsen muutaman tietokantakyselyn, ja sitten voin iteroida tulosluetteloa.<\/p>\n<p>Ensin tarvitsen kyselyn, joka hakee <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-02-term-taxonomy-id-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">termin_taxonomy_id<\/a><\/strong> annetusta luokasta:<\/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>Sitten minun on noudettava luettelo kaikista <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-03-object-ids-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">objektitunnuksista<\/a><\/strong>, jotka liittyv\u00e4t t\u00e4h\u00e4n <strong>term_taxonomy_id<\/strong> :hen :<\/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>T\u00e4st\u00e4 eteenp\u00e4in voin sitten k\u00e4ytt\u00e4\u00e4 aiemmin luomaani alkuper\u00e4ist\u00e4 funktiota (tai luokkaa) tietojen <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-04-render-data-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hahmontamiseen<\/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>Mutta siell\u00e4 on paljon muita asioita, joita voit tehd\u00e4 sielt\u00e4.<\/p>\n<h2>Siell\u00e4 on enemm\u00e4n<\/h2>\n<p>Kuten huomautettiin, t\u00e4m\u00e4 palauttaa objektien tunnukset, jotka ovat olennaisesti viestitunnuksia (tai sivutunnuksia tai mukautettuja postaustyyppien tunnuksia tai mit\u00e4 tahansa <strong>wp_posts-<\/strong> taulukosta).<\/p>\n<p>Kun sinulla on n\u00e4m\u00e4 tiedot, voit hakea mit\u00e4 tahansa tietoja, kuten otsikon, sis\u00e4ll\u00f6n, metatiedot, erilaiset p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4tiedot ja niin edelleen.<\/p>\n<p>Viestin tarkoitus ei kuitenkaan ole n\u00e4ytt\u00e4\u00e4, mit\u00e4 tietoja haetaan, vaan kuinka noutaa tiedot tietylle taksonomialle ja sitten render\u00f6id\u00e4 se mukautetulla WordPress-luokkasivulla. Ja t\u00e4m\u00e4 on suoraviivainen tapa tehd\u00e4 juuri niin.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Viestin tarkoitus ei kuitenkaan ole n\u00e4ytt\u00e4\u00e4, mit\u00e4 tietoja haetaan, vaan kuinka noutaa tiedot tietylle taksonomialle ja sitten render\u00f6id\u00e4 se mukautetulla WordPress-luokkasivulla.<\/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":[719,895,803,864],"tags":[1166],"class_list":["post-230946","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-php-5","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=230946"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230946\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/235442"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=230946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=230946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=230946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}