{"id":229047,"date":"2022-11-05T17:36:00","date_gmt":"2022-11-05T14:36:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229047"},"modified":"2022-11-09T05:19:42","modified_gmt":"2022-11-09T02:19:42","slug":"wp_paeringu-loetavuse-taeiustused-hoolduseks","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/wp_paeringu-loetavuse-taeiustused-hoolduseks\/","title":{"rendered":"WP_p\u00e4ringu loetavuse t\u00e4iustused (hoolduseks)"},"content":{"rendered":"\n<p><a href=\"https:\/\/tommcfarlin.com\/passing-variables-in-wordpress-wp-query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Queryga<\/a> t\u00f6\u00f6tamine, eriti kui teete kohandatud t\u00f6\u00f6d v\u00e4ljaspool tavalist &quot;hankige m\u00f5ned postitused ja kuvage need mallil&quot;, v\u00f5ib olla v\u00f5imas. See kehtib eriti m\u00f5nede t\u00e4iustatud argumentide kohta (nt <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Meta_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Meta_Query<\/a> kasutamine). .<\/p>\n<p>Samuti on omamoodi tore, et protsessi seadistamisel on tavap\u00e4rane toimimisviis. Nimelt:<\/p>\n<ol>\n<li>M\u00e4\u00e4ratlege argumendid,<\/li>\n<li>K\u00e4ivitage WP_Query,<\/li>\n<li>Kontrollige, kas postitusi on,<\/li>\n<li>P\u00f6\u00f6rake neist l\u00e4bi,<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=g2JNxeWO_wA\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">L\u00f5peta need<\/a>.<\/li>\n<\/ol>\n<div class=\"sds-iframe-wrapper fitvidsignore\" style=\"position:relative;padding-top:56.25%;max-width:100%;\"><iframe allowfullscreen style=\"position:absolute;top:0;left:0;width:100%;height:100%;\" src=\"\/\/www.youtube.com\/embed\/g2JNxeWO_wA\" frameborder=\"0\"><\/iframe><\/div>\n<p>Kuid kui j\u00f5uate sinna, kus teete mis tahes t\u00e4iustatud t\u00f6\u00f6d, n\u00e4iteks t\u00f6\u00f6tate kolmanda osapoole lahenduse kohandatud postituse t\u00fc\u00fcbiga, peate meediumi k\u00fclglaadima ja enne sellega t\u00f6\u00f6tamist kindlaks tegema, kas midagi on olemas, v\u00f5ib see olla natuke keerulisem t\u00f6\u00f6tada, kas pole?<\/p>\n<p>Olen avastanud, et nagu iga programmeerimise puhul, v\u00f5ib selle jaotamine palju loetavamateks mooduliteks (v\u00f5i funktsioonideks v\u00f5i osadeks v\u00f5i kuidas iganes neid nimetada) muuta sellega t\u00f6\u00f6tamise palju lihtsamaks.<\/p>\n<p>Siin on \u00fcks viis, kuidas ma t\u00f6\u00f6tan WP_Query loetavuse parandamiseks mitmesugustes hiljuti tehtud asjades.<\/p>\n<h2>WP_p\u00e4ringu loetavuse t\u00e4iustused<\/h2>\n<p>Enne mis tahes n\u00e4ite l\u00e4bimist tasub juhtida t\u00e4helepanu sellele, et WP_Query seadistamisel on m\u00f5ningaid asju, mida me teha ei saa.<\/p>\n<p>N\u00e4iteks kui p\u00e4ring on instantseeritud, ei pruugi me sellega enam palju t\u00e4psemaid asju teha (ma m\u00f5tlen, et mis tahes \u00fcksuse testimise seadistamine, mis ei vaja WordPressi tuuma, on v\u00f5imatu).<\/p>\n<p>See on inimese n\u00e4gu, kes ei suuda teie koodi j\u00e4lgida.<\/p>\n<p>Seda arvestades on siin n\u00e4ide sellest, kuidas see v\u00f5ib alguses v\u00e4lja n\u00e4ha ja kuidas seda saab \u00fcmber kujundada v\u00e4iksemateks funktsioonideks, millest iga\u00fcks on tahtlikum kui \u00fcks pikk meetod.<\/p>\n<h3>N\u00e4ide<\/h3>\n<p>Oletame, et selle postituse jaoks pean andmebaasist p\u00e4ringu tegema k\u00f5igi avaldatud postituste ja postituste kohta ning soovin neid ID j\u00e4rgi j\u00e4rjestada.<\/p>\n<p>J\u00e4rgmisena tahan kindlaks teha, kas m\u00f5nele kolmanda osapoole t\u00f6\u00f6riistale on m\u00e4\u00e4ratud metaandmed, mis vastavad mallile, mille saan hiljem programmiliselt m\u00e4\u00e4rata, arvestades mul olevat teemat.<\/p>\n<p>V\u00f5ib-olla v\u00f5ib koodi esialgne versioon v\u00e4lja n\u00e4ha umbes <a href=\"https:\/\/gist.github.com\/tommcfarlin\/90b954c3afde140c8573d1934172537f#file-00-wp-query-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selline<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Assume this is defined within the context of a class.\nconst MAPPING = [\n        'employers'       =&gt; 'page-past-word.php',\n        'biography'       =&gt; 'page-biography.php',\n        'accomplishments' =&gt; 'page-csv.php',\n    ];\n\n\/* Snip the rest of the class for brevity *\/\n\npublic function map_templates() {\n\n  $args = [\n    'post_type'      =&gt; array( 'post', 'page' ),\n    'post_status'    =&gt; 'publish',\n    'orderby'        =&gt; 'ID',\n    'order'          =&gt; 'ASC',\n    'posts_per_page' =&gt; -1,\n  ];\n  $template_query = new WP_Query( $args );\n\n    if ($template_query-&gt;have_posts()) {\n        while ($template_query-&gt;have_posts()) {\n            $template_query-&gt;the_post();\n\n            $template_id = get_post_meta( $post_id, 'third_party_template_id', true );\n            if ('' === $template_id) {\n                continue;\n            }\n\n                \/\/ The third-party's template post name can be used to map our custom template.\n            $template_info = get_post( $template_id );\n            $template_name = $template_info-&gt;post_name;\n\n            if (isset( self::MAPPING[ $template_name ])) {\n\n                $template_file = self::MAPPING[ $template_name ];\n                update_post_meta( $post_id, '_wp_page_template', $template_file );\n            }\n        }\n    }\n}\n<\/code><\/pre>\n<p>See on palju koodi, et \u00fche funktsiooni jaoks palju t\u00f6\u00f6d teha. V\u00e4hemalt on selles kirjas k\u00f5ik, mis juhtuma peab, kas pole?<\/p>\n<p>Enne edasise lugemist pange t\u00e4hele, et vastendusmassiivi on vaid n\u00e4ide, kuid v\u00f5tmed esindavad selle <strong>kaardistamise<\/strong> metav\u00f5tit ja see aitab meil kaardistada <strong>_wp_page_template<\/strong> v\u00e4\u00e4rtuse, kui on aeg vastendada see tegelikele WordPressi mallifailidele.<\/p>\n<p>Niisiis, kuidas seda lahti teha?<\/p>\n<h3>1 Alustage kogu asjaga<\/h3>\n<p>Esimene asi, mida tahame teha, on luua funktsioon, mis paneb kogu asja liikuma. Saate seda teha m\u00f5nel viisil.<\/p>\n<p>Olen selle valinud <a href=\"https:\/\/gist.github.com\/tommcfarlin\/90b954c3afde140c8573d1934172537f#file-01-map-page-templates-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">j\u00e4rgmiselt<\/a>.<\/p>\n<pre><code>&lt;?php\n\npublic function map_page_templates() {\n\n  $posts = $this-&gt;load_posts_and_pages();\n  if ($posts-&gt;have_posts()) {\n    $this-&gt;assign_templates( $posts );\n  }\n}<\/code><\/pre>\n<p>Lihtsamalt \u00f6eldes kasutab see m\u00f5nda abifunktsiooni \u2013 need k\u00f5ik dokumenteerin allpool \u2013 ja m\u00e4\u00e4rab seej\u00e4rel k\u00f5ik mallid, mis meil \u00fclalpool m\u00e4\u00e4ratletud vastendusmassiivis on.<\/p>\n<h3>2 Laadige postitused ja lehed<\/h3>\n<p>Loomulikult on esimene asi, mida me teha tahame, seadistada helistamiseks funktsioon, mis tagastab p\u00e4ringu tulemusi:<\/p>\n<pre><code>&lt;?php\n\nprivate function load_posts_and_pages() {\n\n  $args = [\n    'post_type'      =&gt; array( 'post', 'page' ),\n    'post_status'    =&gt; 'publish',\n    'orderby'        =&gt; 'ID',\n    'order'          =&gt; 'ASC',\n    'posts_per_page' =&gt; -1,\n  ];\n  $posts = new WP_Query( $args );\n\n  return $posts;\n}\n<\/code><\/pre>\n<p>See tagastab p\u00e4ringu tulemused. Nii saame kindlaks teha, kas peame tegema t\u00e4iendavaid t\u00f6id, mida me eelmises etapis p\u00f5hisises \u00fctleme:<\/p>\n<pre><code>&lt;?php\n\npublic function map_page_templates() {\n\n  $posts = $this-&gt;load_posts_and_pages();\n  if ($posts-&gt;have_posts()) {\n    $this-&gt;assign_templates( $posts );\n  }\n}<\/code><\/pre>\n<p>Kui ei, siis oleme valmis. Muidu me loomulikult j\u00e4tkame.<\/p>\n<h3>3 Hankige kolmanda osapoole malli ID<\/h3>\n<p>J\u00e4rgmiseks n\u00e4ib mallide m\u00e4\u00e4ramise idee \u2013 nagu on n\u00e4idatud \u00fclaltoodud koodis \u2013 piisavalt lihtne, kuid esmalt peame tegema m\u00f5ned asjad:<\/p>\n<ol>\n<li>korrake postitusi,<\/li>\n<li>haarake malli kolmanda osapoole ID,<\/li>\n<li>haarake kolmanda osapoole malli nimi,<\/li>\n<li>m\u00e4\u00e4rata mall klassis varem m\u00e4\u00e4ratletud vastenduskonstandist.<\/li>\n<\/ol>\n<p>Funktsiooni esialgne iteratsioon v\u00f5ib v\u00e4lja n\u00e4ha <a href=\"https:\/\/gist.github.com\/tommcfarlin\/90b954c3afde140c8573d1934172537f#file-03-assign-templates-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">j\u00e4rgmine<\/a> :<\/p>\n<pre><code>&lt;?php\n\nprivate function assign_templates( WP_Query $posts) {\n\n  while ($posts-&gt;have_posts()) {\n    $posts-&gt;the_post();\n\n    $template_id = $this-&gt;get_template_id( get_the_ID() );\n    if ('' === $template_id) {\n      continue;\n    }\n\n    $template_name = $this-&gt;get_template_name( $template_id );\n    if (null === $template_name) {\n      continue;\n    }\n\n    $this-&gt;assign_template( get_the_ID(), $template_name );\n  }\n  wp_reset_postdata();\n}\n<\/code><\/pre>\n<p>Kuid nagu n\u00e4ete, on endiselt abifunktsioone, mis vajavad m\u00e4\u00e4ratlusi. N\u00e4iteks v\u00f5imalus hankida malli ID, malli nimi ja l\u00f5puks mall m\u00e4\u00e4rata.<\/p>\n<p>Pange t\u00e4hele, et kui m\u00f5ni abifunktsioonidest kasulikku v\u00e4\u00e4rtust ei tagasta, j\u00e4tkame ts\u00fckliga. See on vajalik mitte muul p\u00f5hjusel, kui selleks, et me ei p\u00fc\u00fcaks kaardistada malle, mida pole olemas (kuid leian, et see muudab lugemise ka pisut lihtsamaks).<\/p>\n<h3>4 Otsige \u00fcles fail, millele malli ID kaardistab<\/h3>\n<p>J\u00e4rgmisena saab v\u00e4ikese funktsiooni abil vaadata kolmanda osapoole malli ID-d ja teha kindlaks, kas saame selle v\u00e4\u00e4rtuse vastendada <a href=\"https:\/\/gist.github.com\/tommcfarlin\/90b954c3afde140c8573d1934172537f#file-04-get-template-id-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">meie andmebaasis<\/a> olevate lehtedega .<\/p>\n<pre><code>&lt;?php\n\nprivate function get_template_id( $post_id) {\n\n  $template_id = get_post_meta( $post_id, 'third_party_template_id', true );\n  return $template_id;\n}\n<\/code><\/pre>\n<p>Kui see ei \u00f5nnestu, saame tagastada t\u00fchja stringi ja seej\u00e4rel lasta funktsioonil, mis selle konkreetse v\u00e4lja kutsus, kontrollida, kas tasub defineeritud ts\u00fckliga j\u00e4tkata.<\/p>\n<h3>5 Haara malli nimi<\/h3>\n<p>Eeldades, et meil on kehtiv postituse ID, peame n\u00fc\u00fcd <a href=\"https:\/\/gist.github.com\/tommcfarlin\/90b954c3afde140c8573d1934172537f#file-05-get-template-name-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">laadima malli nime<\/a> postituses varem m\u00e4\u00e4ratletud vastendusmassiivist:<\/p>\n<pre><code>&lt;?php\n\nprivate function get_template_name( $template_id) {\n\n  $template_info = get_post( $template_id );\n  $template_name = $template_info-&gt;post_name;\n\n  if (isset( self::MAPPING[ $template_name ])) {\n    return $template_name;\n  } else {\n    return null;\n  }\n}\n<\/code><\/pre>\n<p>Siin on asi: me kas tagastame malli nime v\u00f5i tagastame nullv\u00e4\u00e4rtuse. J\u00e4llegi on see selleks, et saaksime kindlaks teha, kas peame j\u00e4tkama mallide m\u00e4\u00e4ramise ts\u00fckliga v\u00f5i mitte.<\/p>\n<h3>6 M\u00e4\u00e4rake mall<\/h3>\n<p>L\u00f5puks saame haarata kolmanda osapoole pakutava malli ID ja kasutada seda <a href=\"https:\/\/gist.github.com\/tommcfarlin\/90b954c3afde140c8573d1934172537f#file-06-assign-template-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">failiga,<\/a> mille oleme oma t\u00f6\u00f6sse lisanud, nagu postituses varem kirjeldatud:<\/p>\n<pre><code>&lt;?php\n\nprivate function assign_template( $post_id, $template_name) {\n\n  $template_file = self::MAPPING[ $template_name ];\n  update_post_meta( $post_id, '_wp_page_template', $template_file );\n}\n<\/code><\/pre>\n<p>Ja nii saate luua palju v\u00e4iksemat, h\u00f5lpsamini loetavat ja h\u00f5lpsamini kasutatavat koodi ja funktsioone, kui t\u00f6\u00f6tate veidi keerulisemate p\u00e4ringutega.<\/p>\n<h2>Ja seega loetavuse t\u00e4iustused<\/h2>\n<p>Neile, kes on harjunud kirjutama pikki meetodeid v\u00f5i tegema asju nii, nagu paljud veebis olevad \u00f5petused n\u00e4itavad, kuidas WordPressis asju teha, v\u00f5ib see tunduda palju m\u00f5ttetu koodina.<\/p>\n<p>Kuid m\u00f5elge sellele:<\/p>\n<ol>\n<li>Pikemaid meetodeid on raskem lugeda,<\/li>\n<li>Neid v\u00f5ib olla raskem siluda,<\/li>\n<li>Ja nad ei jaga probleemi paremini hallatavateks t\u00fckkideks.<\/li>\n<\/ol>\n<p>Muidugi, mulle meeldiks jagada see veelgi rohkemateks klassideks koos nende kohustustega ja ma usun, et seda saab teha, kuid WP_Query olemust arvestades n\u00f5uaks see veidi rohkem t\u00f6\u00f6d.<\/p>\n<p>Seega olen p\u00fc\u00fcdnud leida v\u00f5imalikult palju keskteed.<\/p>\n<p>Kui t\u00f6\u00f6tate WP_Query isegi veidi arenenumate kasutusviisidega, siis soovitan v\u00e4hemalt kaaluda selle jagamist v\u00e4iksemateks t\u00fckkideks.<\/p>\n<p>See aitab hoolitseda loetavuse ja v\u00f5imaliku hooldatavuse eest ning kirjutada puhtamat koodi, mitte \u00fchte pikka meetodit, mis sisaldab liiga palju tingimustingimusi ja tugineb paljudele muudele andmetele.<\/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>WP_Query loetavusega t\u00f6\u00f6tamine v\u00f5ib olla keeruline. Siin on n\u00e4ide sellest, kuidas ma m\u00f5nes oma t\u00f6\u00f6s API kasutamist lahti teen.<\/p>\n","protected":false},"author":1,"featured_media":220946,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,863],"tags":[1165],"class_list":["post-229047","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=229047"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229047\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/220946"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=229047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=229047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=229047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}