{"id":231120,"date":"2022-12-08T18:12:00","date_gmt":"2022-12-08T15:12:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231120"},"modified":"2022-12-07T11:57:28","modified_gmt":"2022-12-07T08:57:28","slug":"pagina-di-modifica-della-categoria-personalizzata-di-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/pagina-di-modifica-della-categoria-personalizzata-di-wordpress\/","title":{"rendered":"Pagina di modifica della categoria personalizzata di WordPress"},"content":{"rendered":"\n<p>Aggiungere ulteriori meta box, campi e altre informazioni a WordPress \u00e8 facile se conosci gli hook giusti e le API appropriate da seguire. Ma cosa succede se vuoi aggiungere informazioni a una pagina di tassonomia di WordPress?<\/p>\n<p>Ad esempio, supponiamo di voler creare una pagina di modifica della categoria WordPress personalizzata o, almeno, aggiungere alcune informazioni personalizzate a una pagina di tassonomia?<\/p>\n<p>\u00c8 ancora possibile farlo, ed \u00e8 ancora relativamente facile ma, ancora una volta, \u00e8 necessario conoscere gli hook giusti da utilizzare e dipende anche dal fatto che si stia lavorando con le tassonomie integrate o con una tassonomia personalizzata.<\/p>\n<p>Per questo post, mostrer\u00f2 come farlo usando una tassonomia personalizzata e gerarchica (o, in termini pi\u00f9 semplici, una categoria personalizzata).<\/p>\n<h2>Pagina di modifica della categoria personalizzata di WordPress<\/h2>\n<p>Innanzitutto, se scegli di lavorare con una pagina di categoria standard, probabilmente vedrai qualcosa del genere:<\/p>\n<p>E i due hook con cui devi lavorare sono:<\/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\">modulo_categoria_modifica<\/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\">categoria_modifica_modulo<\/a><\/strong><\/li>\n<\/ul>\n<p>Se hai fatto clic su uno dei collegamenti, noterai che quest&#8217;ultimo non ha alcuna informazione ma il primo recita:<\/p>\n<blockquote>\n<p>L&#8217;azione\/hook edit_category_form pu\u00f2 essere utilizzata per eseguire azioni aggiuntive nella schermata di modifica della categoria. Ad esempio, puoi aggiungere campi modulo per salvare informazioni aggiuntive per una particolare categoria.<\/p>\n<\/blockquote>\n<p>A tal fine, generalmente scelgo di utilizzare quel gancio poich\u00e9 \u00e8 ben definito all&#8217;interno del Codex. In questo post, tuttavia, mi occupo solo del rendering delle informazioni, non dell&#8217;aggiunta di campi aggiuntivi che devono essere salvati.<\/p>\n<h3>Cablare le cose<\/h3>\n<p>Nella forma pi\u00f9 semplice, il modo migliore per iniziare ad aggiungere informazioni personalizzate a questo tipo di pagina \u00e8 creare una funzione e collegarla all&#8217;hook sopra elencato. Nella sua forma pi\u00f9 semplice, questo \u00e8 <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\">simile a questo:<\/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>Tuttavia, se segui il percorso orientato agli oggetti, puoi scegliere di avere una classe che accetta un hook come argomento nel costruttore e ascolta l&#8217;attivazione di quell&#8217;evento. In tal caso, il tuo codice potrebbe essere <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-01-object-id-subscriber-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">simile a questo:<\/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>Indipendentemente da ci\u00f2, il punto \u00e8 che \u00e8 necessario disporre di una classe o di una funzione collegata a un hook che visualizzi le informazioni quando viene presentata la schermata.<\/p>\n<h3>Visualizzazione delle informazioni<\/h3>\n<p>Da qui, avrai bisogno di qualcosa da renderizzare. Sono un fan di mantenere la mia logica separata, quindi di solito creo una directory <strong>View<\/strong> e quindi inserisco i file parziali per le viste in quella directory.<\/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=\"Pagina di modifica della categoria personalizzata di WordPress\" ><\/a><\/p>\n<p>Naturalmente, puoi sempre creare la stringa HTML nella funzione PHP (ma assicurati di disinfettare l&#8217;output usando qualcosa come <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>Per questo esempio, rester\u00f2 semplice: voglio solo estrarre un elenco di tutti i post (o oggetti, come vedrai momentaneamente) dal database ed elencare le informazioni sulla pagina. Per fare ci\u00f2, avr\u00f2 bisogno di un paio di query del database e quindi posso scorrere l&#8217;elenco dei risultati.<\/p>\n<p>Innanzitutto, ho bisogno di una query che recuperi il <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_taxonomy_id<\/a><\/strong> dalla categoria specificata:<\/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>Quindi ho bisogno di recuperare un elenco di tutti gli <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-03-object-ids-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ID oggetto<\/a><\/strong> correlati da questo <strong>term_taxonomy_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>Da qui, posso quindi utilizzare la funzione (o classe) originale che ho creato in precedenza per eseguire <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c8eb7e636f9cd42f80908a94af7946a6#file-04-render-data-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il rendering delle informazioni<\/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>Ma ci sono molte altre cose che puoi fare da l\u00ec.<\/p>\n<h2>C&#8217;\u00e8 pi\u00f9<\/h2>\n<p>Come notato, questo restituisce gli ID degli oggetti che sono essenzialmente ID di post (o ID di pagina o ID di tipo di post personalizzati o qualsiasi altra cosa dalla tabella <strong>wp_posts<\/strong> ).<\/p>\n<p>Una volta che hai queste informazioni, puoi recuperare qualsiasi informazione come titolo, contenuto, metadati, varie informazioni sulla data e cos\u00ec via.<\/p>\n<p>Il punto del post, tuttavia, non \u00e8 mostrare quali informazioni recuperare, ma come recuperare le informazioni per una determinata tassonomia e quindi renderle in una pagina di categoria WordPress personalizzata. E questo \u00e8 un modo semplice per fare esattamente questo.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il punto del post, tuttavia, non \u00e8 mostrare quali informazioni recuperare, ma come recuperare le informazioni per una determinata tassonomia e quindi renderle in una pagina di categoria WordPress personalizzata.<\/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":[896,804,720,865],"tags":[1168],"class_list":["post-231120","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-php-6","category-sviluppatore","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=231120"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231120\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/235442"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}