Een complete gids voor aangepaste berichttypen in WordPress. Aangepast berichttype in WordPress - register_post_types, register_taxonomie In welke gevallen moet u een aangepast berichttype maken?

$post_type ( lijn) hoe je je berichttype wilt noemen, deze naam zal in de toekomst in de parameters van veel functies worden gebruikt, houd hier rekening mee. Bovendien kunnen de volgende door WordPress gereserveerde woorden niet als titel worden gebruikt:

  • bijlage
  • herziening
  • nav_menu_item
  • aangepaste_css
  • customize_changeset
  • actie
  • volgorde
  • thema
  • auteur
$args ( reeks) bevat de volgende parameters: labels ( reeks) kunt u interface-elementen van een bepaald berichttype ondertekenen. Meer details in het voorbeeld aan het einde van het bericht. beschrijving( lijn) beschrijving van het recordtype dat wordt geregistreerd. Bij mijn weten wordt deze instelling nergens in de WordPress-engine of in standaard plug-ins en thema's gebruikt. Maar het kan heel goed worden gebruikt in plug-ins of thema's van derden. openbaar( logisch) generaliseert de volgende paar parameters door ze in te stellen op hun respectievelijke standaardwaarden publicly_queryable ( logisch) of elementen van dit soort berichten op de site beschikbaar moeten worden gesteld. Lees meer over het doel van deze parameter.
Standaard: openbare argumentwaarde. uitsluiten_van_zoeken( logisch)
  • waar — sluit records van dit type uit van zoekresultaten op de site,
  • vals - sluit niet uit.

Standaard: tegengestelde waarden van de publieke parameter. show_in_nav_menus( logisch) of elementen van dit type bericht beschikbaar moeten worden gemaakt voor toevoeging aan het sitemenu.
Standaard: openbare argumentwaarde. toon_ui( logisch) of het nodig is om een ​​standaardinterface toe te voegen in het beheerderspaneel voor het bewerken en toevoegen van records van dit type.
Standaard: openbare argumentwaarde.

Toon_in_menu ( logisch|lijn) of het nodig is om items aan het beheerdersmenu toe te voegen.

Standaard: waarde van show_ui-argument. show_in_admin_bar ( logisch) of het nodig is om een ​​link toe te voegen om een ​​nieuw record van dit type aan te maken in het beheerdersdashboard.

Standaard: waarde van het argument show_in_menu. menu_positie( geheel getal) volgorde van opstelling in het menu in het admin-paneel.

menu_icon( lijn) absolute URL van het pictogram voor het menu. De optimale beeldresolutie is 16x16 pixels.

Bovendien introduceerde WordPress 3.8 een ingebouwd pictogrampakket - u kunt elk van deze pictogrammen gebruiken door eenvoudigweg de naam op te geven als een parameterwaarde, bijvoorbeeld dashicons-cart.

Standaard wordt het pictogram voor gewone berichten gebruikt. verwijder_met_gebruiker( logisch) moeten bij het verwijderen van een gebruiker op een blog alle berichten van dit type die hij heeft gepubliceerd automatisch worden verwijderd?
Standaard: onwaar. hiërarchisch ( logisch) of dit type bericht een hiërarchie moet hebben.
Standaard: onwaar. heeft_archief( logisch|lijn) of dit type bericht een eigen archiefpagina moet hebben. U kunt een snelkoppeling naar de archiefpagina opgeven als parameterwaarde.
Standaard: onwaar. herschrijven( reeks|logisch) stelt regels in voor permalinks in URL's. Als u false opgeeft als waarde van deze parameter, worden er geen regels voor permalinks gemaakt.

Naaktslak ( lijn) label gebruikt voor berichten van dit type (standaard is de naam van het berichttype) with_front ( logisch) of de waarde $wp_rewite->front moet worden toegevoegd aan permalinks (standaard - true) feeds ( logisch) of het nodig is om een ​​RSS-feed te maken voor dit type bericht (standaard - de waarde van de parameter has_archive) pagina's ( logisch) moet paginering zijn toegestaan ​​in berichten van een geregistreerd type met behulp van de tag(standaard is waar) ondersteunt ( reeks) welke moeten worden toegevoegd aan de pagina's voor het bewerken van records van dit type.

  • titel - veld voor het invoeren van de titel van het bericht
  • editor - teksteditor
  • uittreksel - "Citaat" metabox
  • auteur — “Auteur” metabox
  • thumbnail - Metabox “Post Thumbnail” (daarnaast moet je thema dit ondersteunen)
  • reacties — metabox “Reacties” (indien gespecificeerd, reacties op berichten van het geregistreerde type zijn toegestaan)
  • trackbacks — metabox “Backlinks verzenden”
  • custom-fields — “Aangepaste velden” metabox (aangepaste velden worden in ieder geval ondersteund)
  • revisies — metabox “Revisies” (indien gespecificeerd, zullen revisies van berichten van dit type in de database worden aangemaakt)
  • page-attributes - Metabox “Paginakenmerken” met de mogelijkheid om een ​​bovenliggend element te selecteren en de volgorde in te stellen menu_order
  • post-formats - “Formaat” metabox, lees meer over berichtformaten.
  • taxonomieën ( reeks) een reeks taxonomieën, zoals categorie of post_tag , die voor dit berichttype moeten worden gebruikt. U kunt ook taxonomieën toewijzen met behulp van de functie.

    Voorbeeld van registratie van berichttype

    Als je niet weet waar je de code moet invoegen, plak deze dan in functies.php van je huidige thema.

    add_action ("init", "true_register_products"); // Gebruik de functie alleen binnen de init hook function true_register_products() ( $labels = array ("name" => "Producten" , "singular_name" => "Product" , // beheerderspaneel Add->Functie"add_new" => "Product toevoegen" , "add_new_item" => "Nieuw product toevoegen", // tagtitel </span>"edit_item" => <span>"Product bewerken"</span>, "new_item" => "Nieuw product" , "all_items" => "Alle producten" , "view_item" => <span>"Bekijk producten op de site"</span>, "search_items" => "Zoek naar producten" , "not_found" => <span>"Geen producten gevonden."</span>, "not_found_in_trash" => <span>"Er zijn geen artikelen in de winkelwagen."</span>, "menu_name" => "Producten" <span>// link in het menu in het beheerderspaneel</span>); $args = array ( "labels" => $labels , "public" => true , <span>// hierdoor kunnen sommige parameters worden overgeslagen</span>"menu_icon" => "dashicons-cart" , <span>// winkelwagenpictogram</span>"menu_position" => 5 , "has_archive" => true , "supports" => array ( "title" , "editor" , "uittreksel" , "thumbnail" , "comments" ) , "taxonomies" => array ( " post_tag" ); register_post_type("product" ,$args ) ; )</td> </tr></table><p><span class="koXPsjWcBis"></span></p></ul> <p>Maak een aangepast berichttype <b>Lidwoord</b> met aangepaste categorieën (aangepaste taxonomie) <b>Categorie artikelen</b>.</p><p>In mijn geval zijn alle standaardrecords Producten, dus we zullen Artikelen weergeven via aangepaste records.</p><p>In het functiebestand function.php registreren we een aangepast berichttype Artikelen:</p><p>Functie wptp_create_post_type() ( $labels = array("name" => __("Artikelen"), "singular_name" => __("Artikelen"), "add_new" => __("Nieuw artikel"), "add_new_item" => __("Nieuw artikel toevoegen"), "edit_item" => __("Artikel bewerken"), "new_item" => __("Nieuw artikel"), "view_item" => __("Artikel bekijken"), "search_items" => __("Artikelen zoeken"), "not_found" => __("Geen artikelen gevonden"), "not_found_in_trash" => __("Geen artikelen gevonden in prullenbak")),); $args = array( "labels" => $labels, "has_archive" => true, "public" => true, "hiërarchisch" => false, "menu_position" => 5, "supports" => array("title", "editor" , "uittreksel", "aangepaste velden", "thumbnail")); register_post_type("articles", $args); ) add_action("init", "wptp_create_post_type");</p><p>Als je wilt dat standaardcategorieën worden weergegeven in aangepaste berichten, koppel ze dan aan de categorieëntaxonomie:</p><p>"taxonomieën" => array("categorie"),</p><p>Als je ook aangepaste taxonomieën voor aangepaste berichten maakt, moet je deze koppelen aan de gemaakte taxonomieën; als we het onderstaande voorbeeld nemen, zijn dit artikelen_categorie</p><p>"taxonomieën" => array("articles_category"),</p><p>Vervolgens registreren we voor het aangepaste berichttype Artikelen de ‘Artikelcategorie’-taxonomieën, zodat verschillende berichten tot verschillende categorieën kunnen behoren.</p><p>Functie wptp_register_taxonomy() ( register_taxonomy("articles_category", "articles", array("labels" => array("name" => "Artikelcategorieën", "singular_name" => "Artikelcategorie", "search_items" => " Artikelcategorieën zoeken", "all_items" => "Alle artikelcategorieën", "edit_item" => "Artikelcategorieën bewerken", "update_item" => "Artikelcategorie bijwerken", "add_new_item" => "Nieuwe artikelcategorie toevoegen", "new_item_name" => "Nieuwe artikelcategorienaam", "menu_name" => "Artikelcategorie",), "hiërarchisch" => true, "sort" => true, "args" => array("orderby" => "term_order"), "show_admin_column" => true)); ) add_action("init", "wptp_register_taxonomy");</p><p>Voor een aangepaste taxonomie kun je de naaktslak in een mooiere veranderen, zodat deze niet de artikelen_categorie is, maar je moet ervoor zorgen dat dergelijke naaktslakken niet langer op andere pagina's of berichten voorkomen, anders zullen er problemen optreden:</p><p>"rewrite" => array("slug" => "blog"),</p><p>Wanneer u slugs wijzigt, moet u de instellingen voor “Permanente Links” in het beheerderspaneel bijwerken, anders ontvangt u een 404-foutmelding in plaats van de gewenste pagina.</p><p>Meer voorbeelden vindt u hier. Maar het hielp om al deze code op orde te brengen, waarvoor ik de auteur erg dankbaar ben.</p><p>Het bestand single.php is verantwoordelijk voor het uiterlijk van een aangepast bericht, maar om het uiterlijk van een aangepast bericht te wijzigen, kun je een bestand single-(post_type).php maken - in mijn geval zal het single-articles.php zijn met zijn eigen inhoud.</p><p>Nu moet je aangepaste berichten op de pagina weergeven. Standaard is het index.php-bestand verantwoordelijk voor het weergeven van het archief van aangepaste berichten. Maar u kunt een bestand maken dat verantwoordelijk is voor het weergeven van aangepaste vermeldingen in uw taxonomie. <br></p><h2>Optie 1 is het meest correct. We geven vermeldingen in de taxonomie op dezelfde manier weer als in een reguliere categorie.</h2><p>Om dit te doen, maakt u een bestand taxonomie-(taxonomie).php - in mijn geval zal het taxonomy-articles_category.php zijn en daarin geven we de gebruikelijke cyclus weer, zoals voor standaarditems in een categorie:</p><p> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="cat-title"><?php single_cat_title(); ?></div> <div class="tax-wrap"> <?php if (have_posts()) : while (have_posts()) : the_post(); get_template_part("include/tax-item"); endwhile; get_template_part("include/pagination"); endif; ?> </div><!-- /tax-wrap --> </div><!-- /col-md-12 --> </div><!-- /row --> </div><!-- /container --> </p><p>In het tax-item.php-bestand geven we de gegevens weer die we uit elk bericht moeten halen, bijvoorbeeld titel, berichtlink, thumbnail en uittreksel.</p><p>In het paginering.php bestand geven we de paginering in dit formaat weer.</p><p>De cyclus is niet veranderlijk, paginering werkt prima. Dit is de beste optie voor het weergeven van aangepaste taxonomieën. <br></p><h2>Optie 2 – als er geen aangepaste taxonomieën zijn, kun je eenvoudig alle aangepaste berichten in de vorm van een archief krijgen</h2><p>Om dit te doen, maken we in de sjabloon een bestandsarchief-(post_type).php - in mijn geval zal het archive-articles.php zijn, waarin we, net als in de taxonomie, een regelmatige lus weergeven, alleen in plaats van de Taxonomietitel: we geven de naam van het aangepaste berichttype weer<?php post_type_archive_title(); ??> :</p><p> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="cat-title"><?php post_type_archive_title(); ?></div> <div class="tax-wrap"> <?php if (have_posts()) : while (have_posts()) : the_post(); get_template_part("include/tax-item"); endwhile; get_template_part("include/pagination"); endif; ?> </div><!-- /tax-wrap --> </div><!-- /col-md-12 --> </div><!-- /row --> </div><!-- /container --> </p><p>Met deze optie kunt u, als er geen archiefpagina voor een aangepast bericht is gemaakt, een lijst met alle aangepaste berichten krijgen via de directe link BLOG_URL?post_type=(post_type) of in mijn geval http://site.com/ Lidwoord/ . <br></p><h2>Optie 3. Geef eenvoudig alle aangepaste artikelitems weer op een pagina met een bepaald sjabloon</h2> <?php $args = array("post_type" =>"artikelen", "posts_per_page" => -1); $loop = nieuwe WP_Query($args); while ($loop->have_posts()) : $loop->the_post(); get_template_part("include/tax-item"); eindtijd; ?> <p>get_template_part("include/tax-item"); – in het tax-item.php bestand geef ik de inhoud van het bericht weer die ik nodig heb om berichten binnen de lus weer te geven (titel, miniatuur, datum, citaat, enz.)</p><p>Met deze optie worden alle artikelen op de pagina weergegeven, ongeacht taxonomieën (categorieën).</p><p>En als we elke categorie afzonderlijk moeten weergeven met eigen nieuws, dan gebruiken we de eerste hierboven beschreven optie.</p><p>Dat gezegd hebbende, als je de Yoast SEO-plug-in gebruikt en de broodkruimels gebruikt:</p><p> <?php if (function_exists("yoast_breadcrumb")) { yoast_breadcrumb(" "); } ?> </p><p>Wanneer u vervolgens de taxonomie “Artikelencategorie” selecteert in de plug-ininstellingen in “Taxonomie om in broodkruimels voor berichttypen weer te geven”, ontvangt u in broodkruimels een link naar de categorie waartoe het Nieuws behoort; met andere opties voor het weergeven van aangepaste berichten , dit kon niet.</p> <p>Over aangepaste berichttypen in WordPress (CPT, aangepaste berichttypen in WordPress), hoe u categorieën en tags toevoegt, hoe u geneste URL's /posttype/categorie/post of http://example.com/post_type/ maakt categorie/ bericht/ . <br>Het beschrijft ook hoe je de standaardfunctionaliteit van WordPress kunt uitbreiden door nieuwe soorten berichten te maken die voor verschillende doeleinden kunnen worden gebruikt: het toevoegen van je eigen portfolio, een film- en muziekindex, een productcatalogus, een evenementenkalender en zelfs het maken van je eigen kleine online winkel (omdat groot beter is, gebruik kant-en-klare oplossingen zoals WooCommerce) of een sociaal netwerk, en nog veel meer in deze geest. <br>Eerst algemene informatie, daarna details.</p> <h2>Over berichten in WordPress: waar ze in de database worden opgeslagen en hoe je ze kunt verkrijgen</h2> <p>Absoluut alle berichten in WordPress, die hieronder worden besproken, worden opgeslagen in één tabel: wp_posts. Metagegevens van berichten, zoals gegevens uit metaboxen, worden opgeslagen in de tabel wp_postmeta.</p> <p>Ik zal een voorbeeld geven van hoe je 10 berichten van het type post (standaard <b>Berichten</b> in het beheerderspaneel). <br>In algemene zin is het niet nodig om specifiek gegevens op te vragen. In sjablonen zijn ze al vooraf geïnstalleerd, in single.php zijn recordgegevens bijvoorbeeld al beschikbaar voor verwerking in een lus</p><p>If (have_posts()) ( while (have_posts()) ( the_post(); // Hier gebruiken we gegevens uit de lus, zoals the_title(), etc. ) )</p><p>Als gegevens ergens buiten de lus of sjabloon moeten worden verkregen, wordt de WP_Query-query gebruikt</p><p>$args = array("post_type" => "post", // Berichttype: pagina, bijlage, ... "posts_per_page" => 10, // 10 berichten tegelijk); $p = get_posts($args); // Gegevens kunnen in een lus worden uitgebreid if (!empty($p)) ( foreach ($p as $post) ( setup_postdata($post); ?> "><?= the_title() ?> <?php } wp_reset_postdata(); } </p><p>Gegevens kunnen worden verkregen met behulp van een SQL-query:</p><p>Globaal$wpdb; $query = "SELECT * FROM ($wpdb -> berichten) WAAR post_type = "post" LIMIET 10"; $p = $wpdb -> get_results($query); exit(print_r($p)); // $p bevat nu een array met postgegevens</p><p>Alle drie bovenstaande methoden geven hetzelfde uitvoerresultaat. <br></p> <h2>Vooraf ingestelde berichttypen in WordPress: bericht, pagina, bijlage, revisie, nav_menu_item</h2> <h3>Inzendingen of berichten (post)</h3> <p>De meest gebruikte eenheid van alle typen in WordPress zijn Posts (ook wel posts genoemd). Gebruikt als blogposts en dergelijke. Het heeft 2 vooraf ingestelde taxonomieën: kopteksten, ook wel categorieën (category) genoemd, en tags, ook wel tags (post_tag) genoemd. <br>Taxonomieën worden gebruikt om berichten te sorteren en te ordenen. <br>Categorieën verschillen van tags doordat ze een boomstructuur hebben (ze kunnen in elkaar worden genest). <br>Labels zijn eenheden die onafhankelijk van elkaar zijn en lijken in dit opzicht enigszins op Records. <br>Bovendien wordt de RSS-feed van een WordPress-site standaard gegenereerd op basis van inzendingen.</p> <p>Voor records worden de volgende sjabloonbestanden gebruikt (in volgorde van prioriteit):</p> <ol><li>single-post.php</li> <li>single.php</li> <li>enkelvoud.php</li> <li>index.php</li> </ol><blockquote class="note"><p>Sjabloonbestanden worden van boven naar beneden in volgorde van prioriteit doorzocht. Als er een sjabloonbestand in het thema wordt gevonden, wordt dit gebruikt en wordt de zoekopdracht gestopt.</p> </blockquote> <h3>Pagina's</h3> <p>De pagina's worden voornamelijk gebruikt als servicepagina's, landingspagina's, landingspagina's, encyclopediecollecties en dergelijke. Ze hebben een boomachtige hiërarchie, dat wil zeggen dat ze in elkaar kunnen worden genest, wat wordt weerspiegeld in het adres van de laatste pagina (bovenliggende snelkoppelingen zullen aanwezig zijn in de URL-keten), en in deze rol is het mogelijk om geef ze voorrang bij het sorteren. <br>U kunt op twee manieren een landingspagina maken: <br></p> <h4>Maak een speciaal paginasjabloon</h4> <p>Maak ergens binnen het thema, in de hoofdmap of de submap ervan, een bestand met een willekeurige naam en php-extensie, bijvoorbeeld landing.php. Binnenin kunt u absoluut elke sjabloon plaatsen, die compleet anders kan zijn dan andere pagina's op de site. Maar het belangrijkste is om deze code aan het begin van het bestand te plaatsen:</p><p> <?php /* Template Name: Наш уникальный лендинг */ </p><p>Sjabloonnaam is een speciaal label dat WordPress vertelt dat dit bestand een speciaal sjabloon is. <br>Wanneer u nu een pagina maakt en bewerkt, kijkt u in het blok aan de rechterkant genaamd Paginakenmerken. Daarin kunt u in het gedeelte Sjabloon onze unieke landingspagina selecteren.</p> <p>Voor Pages wordt de volgende sjabloonhiërarchie gebruikt. Net als bij Records geef ik in volgorde van prioriteit aan:</p> <ol><li>(sjabloon).php</li> <li>pagina-(pagina_label).php</li> <li>pagina-(pagina_ID)</li> <li>pagina.php</li> <li>enkelvoud.php</li> <li>index.php</li> </ol><h3>Bijlagen, bijlagen of bijlagen</h3> <p>Een hulpprogramma dat is ontworpen om informatie op te slaan over bestanden (afbeeldingen, audio, video en dergelijke) die zijn geüpload via de uploader in de standaard WordPress-editor bij het bewerken van een bericht, pagina of iets dergelijks: grootte, gewicht, beschrijving, welk bericht of welke pagina waar ze aan gehecht zijn, en dat soort dingen.</p> <p>U kunt bijlagen verkrijgen voor latere manipulatie met behulp van de volgende code:</p><p>$args = array("post_type" => "attachment", // Berichttype: bijlage "post_status" => "inherit", // De standaard is "publish", en daarmee kun je geen bijlagen ontvangen, dus geven we een speciale bijlagestatus "erven"); $p = get_posts($args); exit(print_r($p)); // Bij de uitvoer hebben we een array met bijlagen</p><p>Hiërarchie van sjablonen voor bijlagen:</p> <ol><li>(mime-type).php</li> <li>(mime-subtype).php</li> <li>(mime-type-subtype).php</li> <li>bijlage.php</li> <li>single.php</li> <li>enkelvoud.php</li> <li>index.php</li> </ol><h3>Revisies, concepten of herzieningen</h3> <p>Revisies, ook wel revisies genoemd, zijn versies van conceptberichten die automatisch worden gemaakt terwijl u een artikel schrijft in het WordPress-beheerderspaneel of een artikel opslaat zonder het daadwerkelijk te publiceren. <br>Tijdens het schrijfproces wordt voor elk artikel standaard elke versie van het concept opgeslagen. U kunt twee verschillende versies vergelijken en teruggaan naar de versie die u nodig heeft. <br>Het opslaan van veel versies van hetzelfde artikel is vrij duur en vaak zinloos (hoewel het waarschijnlijk juister zou zijn om alles standaard te laten staan ​​en regelmatig oude revisies op te schonen met een plug-in, bijvoorbeeld WP Optimize), dus het aantal opgeslagen versies van Revisies kan worden gewijzigd met behulp van 2 opties:</p> <ol><li>Gebruik het wp_revisions_to_keep-filter</li> <li>Registreer in wp-config.php //Schakel revisies uit naar de minimaal mogelijke waarde definition("WP_POST_REVISIONS", 0); <p>Mogelijke waarden:</p> <ul><li>true of -1: slaat elke versie van het concept op. Standaard optie</li> <li>false of 0: schakelt het opslaan van concepten uit, behalve 1 automatisch opslaan</li> <li>Geheel getal groter dan nul: het opgegeven aantal conceptversies wordt opgeslagen + 1 automatisch opslaan. Oude versies die niet binnen het opgegeven aantal passen, worden automatisch verwijderd</li> </ul></li> </ol><h3>Navigatiemenu-items (nav_menu_item)</h3> <p>Een navigatiemenu (nav_menu_item) is een berichttype dat informatie over een navigatie-item in WordPress opslaat. Het eerste en tot nu toe enige type record dat niet wordt gebruikt zoals andere soorten records, de gegevens voor bediening en weergave op de site, krijgt zijn eigen afzonderlijke functies. <br>Bovendien zijn navigatiemenu's niet standaard ingeschakeld. Om ze mogelijk te maken, moet u hun steun betuigen in:</p> <ol><li>Schrijf add_theme_support("menu's");</li> <li>Of registreer een menuruimte met register_nav_menu() , waarna menuondersteuning automatisch wordt ingeschakeld</li> </ol><p>Gebruik wp_nav_menu() om de gegevens op te halen, omdat WP_Query niet zal werken en dat is een functie van het berichttype nav_menu_item</p><p>// Deze code werkt wp_nav_menu(); // Toont het eerste geregistreerde niet-lege menu // Maar de onderstaande code werkt niet $args = array("post_type" => "nav_menu_item", // Berichttype: pagina, bijlage, ...); $p = get_posts($args); exit(print_r($p)); // De uitvoer zal een lege array zijn</p><h2>Aangepast berichttype (CPT WordPress)</h2> <p>Nu komen we bij het belangrijkste: de tool waarmee je de standaard WordPress-blogfunctionaliteit kunt uitbreiden naar eindeloze mogelijkheden: een aangepast aangepast berichttype. <br>Het eenvoudigste voorbeeld van hoe u ons nieuwe berichttype sheensay_product kunt registreren</p><p>Add_action("init", "sheensay_post_type"); function sheensay_post_type() ( register_post_type("sheensay_product", array("labels" => array("name" => "Producten", "singular_name" => "Producten",), "public" => true, // type records zijn open voor zoeken en dergelijke "has_archive" => true, // Schakel archiefpagina's in "supports" => array("title", "editor", "thumbnail", "comments"), // Schakel ondersteuning in voor de titel, editor, thumbnails, commentaar)); )</p><p>Hier is sheensay_product de naam van het nieuwe berichttype. Het mag niet conflicteren met anderen in het systeem; daarover hieronder meer. <br>In deze uitvoeringsvorm dient het ook als een snelkoppeling naar dit type bericht, dat wil zeggen dat het aanwezig is in de URL. Als u bijvoorbeeld een andere snelkoppeling wilt opgeven <b>producten</b>, doe zoals in het onderstaande voorbeeld</p><p>Add_action("init", "sheensay_post_type"); function sheensay_post_type() ( register_post_type("sheensay_product", array("labels" => array("name" => "Producten", "singular_name" => "Producten",), "public" => true, "rewrite" => array("slug" => "products"), // Het label Custom Post Type "has_archive" => true, "supports" => array("title", "editor", "thumbnail"),) ) ; )</p><h3>Hoe je de juiste naam kiest voor een nieuw berichttype</h3> <blockquote class="attention"><p>De volgende namen zijn gereserveerd in WordPress en kunnen niet worden gebruikt als de naam van een nieuw berichttype:</p> <ul><li>bijlage</li> <li>herziening</li> <li>nav_menu_item</li> <li>actie</li> <li>thema</li> <li>volgorde</li> </ul><p>Vermijd ook het gebruik van het voorvoegsel wp_ aan het begin van de naam, omdat dit conflicten kan veroorzaken met toekomstige versies van de WordPress-kern. <br>Het is het beste als u namen voorafvoegt met willekeurige voorvoegsels die verband houden met de naam van uw site, product of merk, bijvoorbeeld sheensay_product, dan voorkomt u gegarandeerd potentiële conflicten</p> </blockquote> <h3>Hoe u een aangepaste taxonomie maakt</h3> <p>Aangepaste berichttypen kunnen taxonomieën uit berichten gebruiken, bijvoorbeeld categorieën (categorieën) of tags (tags), maar u kunt ook uw eigen taxonomieën hebben.</p><p>Add_action("init", "sheensay_post_type"); function sheensay_post_type() ( // Registreer de taxonomie register_taxonomy("sheensay_product_type", "sheensay_product", array("label" => "Typen", "hiërarchisch" => true, // Indien WAAR, zal de taxonomie analoog zijn aan koppen (categorieën). Indien FALSE (standaard), wordt de taxonomie een analoog van labels (tags): "rewrite" => array("slug" => "product-type"),)); // Registreer een aangepast post type (Aangepast berichttype) register_post_type ("sheensay_product", array("labels" => array("name" => "Producten", "singular_name" => "Producten",), "public" => true, " rewrite" => array("slug " => "products"), // Het CPT-label wordt hier gedefinieerd "has_archive" => true, "supports" => array("title", "editor", "thumbnail") , // Ondersteuning inschakelen voor titel, editor, thumbnail )); )</p><h3>Sjablonen voor aangepaste berichttypen</h3> <p>Het hangt allemaal af van wat voor soort informatie wordt weergegeven. Er kunnen 3 opties zijn: een specifiek berichtsjabloon, een berichtarchiefsjabloon en een taxonomiesjabloon <br></p> <h4>Sjabloon voor berichtpagina</h4> <p>Vermeld in volgorde van prioriteit</p> <ol><li>single-(post_type).php</li> <li>single.php</li> <li>index.php</li> </ol><h4>Postarchiefsjabloon</h4> <ol><li>archief-(post_type).php</li> <li>archief.php</li> <li>index.php</li> </ol><h4>Aangepaste taxonomiesjabloon</h4> <ol><li>taxonomie-(taxonomie_naam)-(term_naam).php</li> <li>taxonomie-(taxonomie_naam).php</li> <li>taxonomie.php</li> <li>archief.php</li> <li>index.php</li> </ol><p>Hier is taxonomie_naam sheensay_product_type en term_naam is het label van de taxonomie die u in het beheerdersdashboard gaat maken.</p> <h3>Hoe u aangepaste berichttypegegevens kunt verkrijgen (Custom Post Type WordPress) en deze op de site kunt weergeven</h3> <p>U kunt aangepaste berichttypegegevens in WordPress verkrijgen voor weergave op uw website met dezelfde methoden als gewone berichten en pagina’s</p><p>$args = array("post_type" => "sheensay_product", // Specificeer ons nieuwe berichttype "posts_per_page" => 10,); $p = get_posts($args); foreach ($p als $post) ( setup_postdata($post); ?> "><?= the_title() ?><br /> <?php } wp_reset_postdata(); ?> </p><p>Als we het hebben over het hoofdverzoek, waarvoor gegevens bijvoorbeeld vooraf zijn geladen voor weergave op de hoofdpagina of op standaardarchiefpagina's, dan zijn willekeurige berichttypen daar uitgeschakeld. <br>Dus als je wilt dat een aangemaakt berichttype op bijvoorbeeld archiefpagina's verschijnt, samen met gewone berichten, moet je het voorlaadfilter voor berichten wijzigen</p><p>// Verbind ons "sheensay_product" met de standaard "post" en "page" add_action("pre_get_posts", "add_sheensay_product_in_main_query"); function add_sheensay_product_in_main_query($query) ( if (is_archive() && $query -> is_main_query()) $query -> set("post_type", array("post", "page", "sheensay_product")); return $query ; )</p><h3>Kant-en-klare klasse voor het maken van aangepaste berichttypen met aangepaste taxonomie</h3> <p>Hieronder staat een klasse waarmee je elk aangepast berichttype met een eigen taxonomie kunt registreren, en de URL zal er zo uitzien <br>http://example.com/products/type/product</p> <blockquote class="note"><p>Om de URL te genereren, moet u naar de permalink-instellingen /wp-admin/options-permalink.php gaan en alle soorten algemene instellingen instellen, behalve eenvoudige</p> <p><img src='https://i0.wp.com/sheensay.ru/wp-content/uploads/2016/08/options-permalink.png' width="100%" loading=lazy loading=lazy></p> </blockquote> <p>Hieronder vindt u de klassecode zelf. U hoeft er geen wijzigingen in aan te brengen, maar u kunt het berichttypelabel helemaal aan het einde van de regel wijzigen new Sheensay_Product("products"); <br>De code zelf is geschreven in of in . De eerste optie verdient de voorkeur, omdat u in dit geval de toegang tot de inhoud van het nieuwe berichttype niet verliest wanneer u het actieve thema wijzigt.</p><p> <??p=1713 * */ final class Sheensay_Product { // Ярлык произвольного типа записи по умолчанию private $post_type = "продукция"; function __construct($post_type = "") { // Переопределяем значение ярлыка по умолчанию if ($post_type) $this -> post_type = $post_type; /* * Registreer aangepast berichttype */ add_action("init", array($this, "sheensay_cpt_product"); /* * Filter de URL */ add_filter("post_type_link", array($this, "product_permalink_structure"), 10, 2); /* * Om paginering te laten werken */ add_action("generate_rewrite_rules", array($this, "fix_product_category_pagination")); ) function sheensay_cpt_product() ( /* * Registreer een aangepaste taxonomie voor een nieuw berichttype */ register_taxonomy("sheensay_product_type", "sheensay_product", array("label" => "Typen", "hiërarchisch" => true, "query_var " = > true, "rewrite" => array("slug" => $this -> post_type),)); /* * Registreer een nieuw berichttype */ $labels = array("name" => "Producten" , // Hoofdnaam "singular_name" => "Producten", // Voeg "add_new" toe => "Nieuwe toevoegen", // Naam van de link naar het nieuwe item in de zijbalk "add_new_item" => "Nieuwe producten toevoegen" , // Titel in de editor bij het toevoegen van een nieuw item); $args = array("labels" => $labels, "public" => true, "publicly_queryable" => true, "show_ui" => true, "query_var " => true, "capability_type" = > "post", "hiërarchisch" => false, "menu_position" => null, "supports" => array("title", "editor", "thumbnail", "fragment" ), "rewrite" => array( "slug" => $this -> post_type . "/%sheensay_product_type%", "with_front" => false,), "has_archive" => $this -> post_type,); register_post_type("sheensay_product", $args); if (current_user_can("manage_options")) // Wees voorzichtig met deze functie. Het reset alle URL-detectieregels. Het is beter om er commentaar op te geven nadat al het werk is voltooid flush_rewrite_rules(); ) function product_permalink_structure($post_link, $post) ( if (FALSE !== strpos($post_link, "%sheensay_product_type%")) ( $product_type_term = get_the_terms($post -> ID, "sheensay_product_type"); if (!empty ($product_type_term)) $post_link = str_replace("%sheensay_product_type%", $product_type_term -> slug, $post_link); ) return $post_link; ) function fix_product_category_pagination($wp_rewrite) ( unset($wp_rewrite -> regels[ $this - > post_type . "/([^/]+)/page/?((1,))/?$"]); $wp_rewrite -> regels = array($this -> post_type . "/?$" => $wp_rewrite -> index . "?post_type=sheensay_product", $this -> post_type . "/page/?((1,))/?$" => $wp_rewrite -> index . "?post_type=sheensay_product&paged=" . $wp_rewrite -> preg_index(1), $this -> post_type. "/([^/]+)/page/?((1,))/?$" => $wp_rewrite -> index . "?sheensay_product_type= ". $wp_rewrite -> preg_index(1) . "&pagina=" . $wp_rewrite -> preg_index(2),) + $wp_rewrite -> regels; ) ) /* * Voer de klasse uit * Tussen haakjes kunt u de naam van het berichttypelabel definiëren */ new Sheensay_Product("products");</p><p>Nu kunt u in het beheerderspaneel nieuwe producten en hun typen registreren</p> <p>A! Contentmanagement systeem <b>WordPress</b> kreeg al jaren erkenning, maar de echte doorbraak was de implementatie van de mogelijkheid om records in typen te scheiden. In deze les gaan we dieper in op aangepaste berichttypen, hun creatie en gebruik.</p> <h3>Een beetje geschiedenis</h3> <p>In de praktijk verschenen aangepaste berichttypen al een hele tijd geleden, meer precies sinds 17 februari 2005, toen <b>WordPress 1.5</b> ondersteuning voor aangepaste typen is toegevoegd voor statische pagina's, via het veld post_type in de database. De functie Wp_insert_post() bestaat sindsdien <b>WordPress 1.0</b> dus toen het veld post_type in 1.5 werd geïmplementeerd, was het vrij eenvoudig om het met deze functie in te vullen.</p> <p>En pas in versie 2.8 verscheen de functie register_post_type() voor het maken van aangepaste typen en waren er nog enkele andere nuttige dingen beschikbaar in “nightly builds”, en al vanaf 2.9 werden de functies voor iedereen beschikbaar.</p> <h3>Wat nu?!</h3> <p>Een custom post type is niets meer dan een gewone post (artikel) met een specifieke veldwaarde post_type in de database. In een normaal bericht heeft het veld post_type de waarde <b>na</b>, pagina doet ertoe <b>bladzijde</b> enzovoort. We kunnen nu echter onze eigen typen maken om de details van de inhoud van een bericht te specificeren. Je kunt aangepaste berichttypen maken voor boeken, films, grappen, producten en al het andere. <br>Als het correct wordt gedaan, kunt u met slechts een paar regels code de volgende resultaten bereiken:</p> <ul><li>Plaats een aangepast type op het hoofdpaneel van het admin-gebied met submenu-items: een lijst met alle items met dit type, en maak ook een nieuw item met dit type;</li> <li>Maak een archief met berichten van dit type, dat wil zeggen, doe iets dat lijkt op de hoofdpagina voor een aangepast type;</li> <li>Maak categorieën en tags die toegankelijk zijn voor aangepaste berichttypen en aangepaste taxonomieën.</li> </ul><p>Verschillende soorten inhoud hebben verschillende gegevensvereisten. Voor gewone berichten moet je de auteur, categorie en datum vermelden. Terwijl ik voor een record met het type 'boek' de auteur van het boek, het aantal pagina's, het genre, de uitgever en andere specifieke gegevens zou willen kunnen specificeren. Dit kan eenvoudig worden bereikt door aangepaste (metaboxen) gebieden te gebruiken voor gegevensinvoer.</p> <p>— gebieden voor het rechtstreeks invoeren van aanvullende gegevens op de pagina voor het maken van records. Deze gebieden maken het gemakkelijker om met aangepaste berichttypen te werken.</p><p><img src='https://i0.wp.com/xozblog.ru/wp-content/uploads/2012/11/meta-boxes.jpg' align="center" height="202" width="299" loading=lazy loading=lazy><br></p> <h3>Werken met aangepaste berichttypen</h3> <p>Om effectief aangepaste berichttypen te kunnen maken en gebruiken, moet je bekend zijn met het volgende:</p> <ul><li>Aangepaste berichttypen maken;</li> <li>Het creëren van een aangepaste taxonomie;</li> <li>Aangepaste gegevensgebieden maken.</li> </ul><h4>Aangepaste berichttypen maken</h4> <p>Het eerste dat u hoeft te doen, is het aangepaste berichttype zelf maken. Idealiter maak je een plug-in om aangepaste berichttypen te verwerken, maar je kunt ook het function.php-bestand van je thema gebruiken.</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br></p> </td><td><p><br>$args = array () ; <br>} <br></p> </td> </tr></tbody></table><p>Dit is de eenvoudigste vorm van het maken van een type dat vrijwel geen instellingen heeft. Om ons nieuwe berichttype te ontwikkelen, zullen we enkele van de meest gebruikte opties gebruiken en deze toevoegen aan de voorheen lege $args-array.</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br></p> </td><td><p>functie mijn_aangepaste_post_product() ( <br>$labels = array ( <br>"name" => _x( "Producten" , "algemene naam van berichttype" ) , <br>"singular_name" => _x( "Product" , "berichttype enkelvoudige naam" ), <br>"add_new" => _x( "Nieuw toevoegen" , "product" ) , <br>"add_new_item" => __( <span>"Nieuw product toevoegen"</span> ) , <br>"edit_item" => __( <span>"Product bewerken"</span> ) , <br>"new_item" => __( "Nieuw product") , <br>"all_items" => __( "Alle producten" ), <br>"view_item" => __( <span>"Bekijk product"</span> ) , <br>"search_items" => __( "Vind een product") , <br>"niet_gevonden" => __( <span>"Geen producten gevonden"</span> ) , <br>"not_found_in_trash" => __( <span>"Geen producten verwijderd"</span> ) , <br>"parent_item_colon" => "" , <br>"menu_name" => "Producten" <br>) ; <br>$args = array ( <br>"labels" => $labels , <br>"beschrijving" => <span>'Aangepast productrecordtype'</span>, <br>"openbaar" => waar, <br>"menu_positie" => 5, <br>"supports" => array ("title" , "editor" , "thumbnail" , "uittreksel" , "comments" , "product_category" ) , <br>"has_archive" => waar, <br>) ; <br>register_post_type("product" , $args ); <br>} <br>add_action( "init" , "mijn_aangepaste_post_product" );</p> </td> </tr></tbody></table> <ul><li><b>etiketten</b>— deze reeks labels wordt gebruikt om het aangepaste berichttype te beschrijven dat in het onderwerp wordt gemaakt./li></li><li><b>beschrijving</b>- een samenvatting van het aangepaste berichttype dat wordt gemaakt, wat het doet en waarom we het gebruiken.</li> <li><b>openbaar</b>— of het aangepaste type openbaar moet worden gebruikt en of het in het administratieve gebied moet worden getoond. In dit geval is de waarheid vastgesteld.</li> <li><b>menu_positie</b>— de positie van het menu-item van ons type op het hoofdbeheerderspaneel. Een waarde van 5 betekent dat het item onmiddellijk na het menu-item “Records” wordt geïnstalleerd, terwijl 10 betekent na het item “Mediabestanden”, enz.</li> <li><b>ondersteunt</b>— deze optie bevat een array die de velden beschrijft die we kunnen bewerken op de pagina voor het maken van records. Dat wil zeggen, titel - er verschijnt een veld voor het invoeren van de naam van het bericht, editor - er wordt een tekstgebied weergegeven voor het invoeren van de tekst van het bericht, enz. De gebruikte aangepaste taxonomie, product_category , wordt ook aangegeven.</li> <li><b>heeft_archief</b>- indien ingesteld op true, wordt er een herschrijfregel gemaakt, zodat u een lijst met records van ons type kunt krijgen op http://mysite.com/product/</li> </ul><p><br><img src='https://i0.wp.com/xozblog.ru/wp-content/uploads/2012/11/custom-post-types-1.png' align="center" width="100%" loading=lazy loading=lazy><br></p> <p>Nadat je deze code in je function.php-bestand hebt geïnstalleerd, zou je een menu voor het aangepaste berichttype moeten zien. Het is nu mogelijk om een ​​record toe te voegen en de lijst met records te bekijken.</p> <p>Dit zijn echter niet alle opties voor een reeks argumenten; u vindt een volledige lijst met opties en alle mogelijkheden van aangepaste typen.</p> <h4>Interactieve waarschuwingen</h4> <p>WordPress genereert enkele berichten die worden geactiveerd door gebruikersacties. We kunnen ook soortgelijke berichten maken om de gebruiker op de hoogte te stellen bij het werken met typen. Dit wordt gedaan door post_updated_messages.</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br></p> </td><td><p>functie mijn_updated_messages( $messages ) ( <br>globaal $post, $post_ID; <br>$berichten["product"] = array( <br>0 => "" , <br>1 => sprintf ( __( <span>"Product bijgewerkt. Bekijken"</span><br>2 => __() , <br>3 => __(<span>"Aangepaste velden bijgewerkt."</span>) , <br>4 => __(<span>"Product bijgewerkt."</span>) , <br>5 => isset ($_GET ["revisie"] ) ? sprintf ( __( <span>"Product hersteld naar revisie van %s"</span>), wp_post_revision_title( (int) $_GET ["revisie" ] , false ) ): false , <br>6 => sprintf ( __( <span>"Product gepubliceerd. Bekijken"</span>), esc_url( get_permalink($post_ID ) ) ), <br>7 => __(<span>"Product opgeslagen."</span>) , <br>8 => sprintf ( __( <span>"Product verzonden. Bekijken"</span><br>9 => sprintf ( __( <span>"Het product is gepland voor: <strong>%1$s</strong>. Kijk"</span>) , date_i18n( __( "M j, Y @ G:i" ) , strtotime ( $post -> post_date ) ) , esc_url( get_permalink($post_ID ) ) , <br>10 => sprintf ( __( <span>"Productconcept bijgewerkt. Bekijken"</span>) , esc_url( add_query_arg( "preview" , "true" , ​​get_permalink($post_ID ) ) , <br>) ; <br>retourneer $ berichten; <br>} <br>add_filter( "post_updated_messages", "mijn_updated_messages" );</p> </td> </tr></tbody></table><p>Houd er rekening mee dat u met deze ene functie waarschuwingen kunt instellen voor alle aangepaste berichttypen. Als u geen typenaam opgeeft, worden waarschuwingen gebruikt voor alle aangepaste typen.</p><p><img src='https://i2.wp.com/xozblog.ru/wp-content/uploads/2012/11/custom-post-types-2.png' align="center" width="100%" loading=lazy loading=lazy><br></p> <p>Contextuele aanwijzingen worden zelden geïmplementeerd en gebruikt. Als gebruiker heb ik deze functie nog nooit gebruikt, maar ik weet zeker dat iemand ze nog steeds gebruikt. Laten we dus dergelijke contextuele hulp creëren. <br>Contextuele hints bevinden zich in de rechterbovenhoek, vlakbij het tabblad Scherminstellingen.</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br></p> </td><td><p>functie mijn_contextual_help( $contextual_help , $screen_id , $screen ) ( <br>if ( "edit-product" == $screen -> id ) (</p><p>$contextuele_help = <span>"<h2>Producten</h2><br> <p>Deze pagina bevat een lijst met alle producten die op de site worden verkocht. De vermeldingen zijn in omgekeerde chronologische volgorde, waarbij de laatst genoemde items de items zijn die we als eerste hebben toegevoegd.</p> <br> <p>U kunt de details van elk product bekijken/bewerken door op de naam ervan te klikken, of u kunt bulkacties uitvoeren via het vervolgkeuzemenu door meerdere items te selecteren.</p>" </span>; </p><p>) elseif ( "product" == $screen -> id ) (</p><p>$contextuele_help = <span>"<h2>Een product aanmaken/bewerken</h2><br> <p>Op deze pagina kunt u een product maken of bestaande gegevens erover bewerken. Zorg ervoor dat u de aanvullende velden invult.</p>" </span>; </p><p>} <br>retourneer $contextual_help ; <br>} <br>add_action( "contextuele_help" , "mijn_contextuele_help" , 10 , 3 );</p> </td> </tr></tbody></table><p>Om zo'n tooltip te kunnen tonen, moeten we de scherm-ID kennen. Als u tijdens het maken de scherm-ID wilt achterhalen, doet u dit:</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"> </td><td><p>echo $screen -> id;</p> </td> </tr></tbody></table><p><br><img src='https://i1.wp.com/xozblog.ru/wp-content/uploads/2012/11/custom-post-types-3.png' align="center" width="100%" loading=lazy loading=lazy><br></p> <h3>Aangepaste taxonomie</h3> <p>Voor een gewone blog zijn categorieën en tags voldoende om een ​​organisatiestructuur te creëren. Terwijl dit voor aangepaste berichttypen niet altijd voldoende is. Een aangepaste taxonomie kan dit probleem oplossen. In ons geval is er sprake van een taxonomie met de naam ‘Productcategorieën’, ​​die alleen wordt gebruikt voor berichten met het aangepaste type ‘Producten’.</p> <p>Het proces van het maken van een aangepaste taxonomie is vrijwel identiek aan het maken van aangepaste berichttypen. Laten we naar ons voorbeeld kijken:</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br></p> </td><td><p>functie mijn_taxonomies_product() ( <br>$labels = array ( <br>"naam" => _x( <span>"Productcategorieën"</span>, "taxonomie algemene naam") , <br>"enkelvoudige_naam" => _x( <span>"Product categorie"</span>, "taxonomie enkelvoudige naam") , <br>"zoek_items" => __( <span>"Zoek productcategorie"</span> ) , <br>"alle_items" => __( <span>"Alle productcategorieën"</span> ) , <br>"ouder_item" => __( <span>"Bovenliggende productcategorie"</span> ) , <br>"parent_item_colon" => __( <span>"Bovenliggende productcategorie:"</span> ) , <br>"edit_item" => __( <span>"Productcategorie bewerken"</span> ) , <br>"update_item" => __( <span>"Productcategorie bijwerken"</span> ) , <br>"add_new_item" => __( <span>"Voeg een nieuwe productcategorie toe"</span> ) , <br>"nieuwe_item_naam" => __( <span>"Nieuwe productcategorie"</span> ) , <br>"menunaam" => __( <span>"Productcategorieën"</span> ) , <br>) ; <br>$args = array ( <br>"labels" => $labels , <br>"hiërarchisch" => waar, <br>) ; <br>register_taxonomie("product_categorie" , "product" , $args ) ; <br>} <br>add_action( "init" , "mijn_taxonomies_product" , 0 );</p> </td> </tr></tbody></table><p>Net als bij het maken van een aangepast type hebben we een labelarray gevormd en aangegeven dat de hiërarchische structuur relevant is voor de gemaakte taxonomie (d.w.z. er kunnen bovenliggende en onderliggende elementen zijn) - dit is typisch voor categorieën in reguliere berichten. Anders worden, als de structuur niet hiërarchisch is, gewone tags gemaakt. U kunt meer lezen over taxonomie.</p><p><img src='https://i2.wp.com/xozblog.ru/wp-content/uploads/2012/11/custom-post-types-4.png' align="center" width="100%" loading=lazy loading=lazy><br></p> <h3>Extra gegevensgebieden</h3> <p>Mogelijk heb je extra gebieden of blokken gezien voor gegevensinvoer (metaboxen) op de berichtbewerkingspagina. Iedereen kent de standaarden, zoals het kiezen van een categorie of tags. Ook zijn er in sommige onderwerpen opties waarmee u een afbeelding aan een bericht kunt toevoegen, enz.</p> <p>Omdat we een aangepast type "Producten" maken, hebben we uiteraard de prijs van het product nodig. Laten we eens kijken naar het proces van het maken van aangepaste producten.</p> <p>Het creatieproces kan in 3 fasen worden verdeeld:</p> <ul><li>Definitie van het blok zelf;</li> <li>Het definiëren van de inhoud (welke velden aanwezig zijn in het blok);</li> <li>Beschrijving van algoritmen voor het verwerken van ingevoerde gegevens.</li> </ul><h4>Definitie van metaboxen</h4> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br></p> </td><td><p>add_action( "add_meta_boxes", "product_price_box" ); <br>functie product_price_box() ( <br>add_meta_box( <br>"product_prijs_doos" , <br>__( "Productprijs", "mijnplugin_tekstdomein" ), <br>"productprijs_doos_inhoud", <br>"Product" <br>"kant" <br>"hoog" <br>) ; <br>} </p> </td> </tr></tbody></table><p>De bovenstaande code maakt een blok met de volgende parameters:</p> <ul><li><b>product_prijs_doos</b>— een unieke identificatiecode voor de metabox (deze hoeft niet overeen te komen met de functienaam);</li> <li><b>Product prijs</b>— de naam van de metabox die de beheerder op de pagina ziet;</li> <li><b>product_price_box_content</b>— een functie die de inhoud van het venster weergeeft;</li> <li><b>Product</b>— de naam van het aangepaste berichttype waartoe de metaboxen behoren;</li> <li><b>kant</b>— positie van het blok op de pagina (standaard, normaal of geavanceerd);</li> <li><b>hoog</b>— prioriteit van metaboxen (in dit geval “hoog”, het blok bevindt zich helemaal bovenaan de zijbalk. Opties: hoog, kern, laag of standaard - standaard).</li> </ul><h4>Inhoudsdefinitie</h4> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br></p> </td><td><p>functie product_price_box_content( $post ) ( <br>wp_nonce_field( plugin_basename( __FILE__ ) , ) ; <br>echo <span>"<label for="product_price"></label>" </span>; <br>echo <span>"<input type="text" id="product_price" name="product_price" placeholder="prijs invoeren">" </span>; <br>} </p> </td> </tr></tbody></table><p>We voegen slechts één veld toe om de prijs van het product in te voeren. Merk op dat de naam van de functie overeenkomt met de waarde van de derde parameter wanneer deze wordt gedeclareerd (code hierboven).</p> <h4>Verwerking van ingevoerde gegevens</h4> <p>De laatste stap is het opslaan van de ingevoerde productprijs in de database.</p> <table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><p>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br></p> </td><td><p>add_action("save_post", "product_price_box_save" ); <br>functie product_price_box_save( $post_id ) (</p><p>als (gedefinieerd("DOING_AUTOSAVE") && DOING_AUTOSAVE) <br>opbrengst ;</p><p>if (! wp_verify_nonce( $_POST [ <span>"product_price_box_content_nonce"</span>] , plug-in_basisnaam( __FILE__ ) ) ) <br>opbrengst ;</p><p>if ( "pagina" == $_POST [ "post_type" ] ) ( <br>if (! current_user_can( "edit_page" , $post_id ) ) <br>opbrengst ; <br>) anders ( <br>if (! current_user_can( "edit_post" , $post_id ) ) <br>opbrengst ; <br>} <br>$product_price = $_POST ["product_price"] ; <br>update_post_meta( $post_id , "product_price" , $product_price ) ; <br>} </p> </td> </tr></tbody></table><p>Het grootste deel van de functie bestaat uit controles. Allereerst wordt automatisch opslaan aangevinkt; de prijs wordt pas opgeslagen als op de knop Opslaan of Update wordt gedrukt. Vervolgens worden de toegangsrechten om de gegevens van dit bericht te bewerken gecontroleerd en pas daarna wordt met behulp van de update_post_meta-functie de prijs in de database ingevoerd.</p> <h3>Berichten van het gemaakte type op de blog weergeven</h3> <p>We hebben alle fasen doorlopen van het maken van een aangepast berichttype. Het enige dat overblijft is profiteren van de vruchten van ons werk en een weergave van berichten op de blog maken in overeenstemming met de taxonomie die we hebben vastgesteld.</p> <p>Omdat we tijdens het maken van het aangepaste type true hebben opgegeven voor de parameter has_archive, is de lijst met records van het producttype beschikbaar op http://mysite.com/product/.</p> <p>Het archief-.php-bestand (in ons geval archief-product.php) wordt gebruikt voor weergave als het bestaat. Anders wordt archive.php gebruikt voor weergave en als een dergelijk bestand niet in het thema zit, wordt ) <br>) ; <br>$products = nieuwe WP_Query( $args ); <br>if ($producten -> have_posts () ) ( <br>while ($products -> have_posts () ) ( <br>$producten -> de_post () ; <br>?> <br>< h1> <?php the_title() ?> </ h1> <br>< div class = "content" > <br><?php the_content() ?> <br></ div> <br><?php <br>} <br>} <br>anders( <br>echo <span>"Oh nee, geen eten gevonden!"</span>; <br>} <br>?> </p> <h4>Prijsweergave</h4> <p>De extra ingevoerde gegevens, in ons geval de prijs van het product, kunnen worden opgehaald met behulp van de get_post_meta() functie. Omdat we bovendien het veld product_price gebruiken om de prijswaarde te verkrijgen:</p> <h3>Plug-in voor het maken van aangepaste berichttypen</h3> <p>Als u niet zeker bent van uw programmeervaardigheden, kunt u altijd een kant-en-klare oplossing (plug-in) vinden en deze gebruiken. Aangepaste typen zijn geen uitzondering. Inpluggen <b>WCK-maker van aangepast berichttype</b> Hiermee kunt u eenvoudig aangepaste berichttypen voor WordPress maken zonder enige codeerkennis.</p> <p>De standaardcategorieën worden alleen gebruikt voor berichten. In sommige scenario's wil je ze misschien gebruiken met een aangepast berichttype. In dit artikel vertellen wij je hoe je dit doet.</p> <h4>Plug-in methode</h4> <p>Voor beginnende gebruikers raden we aan de Custom Post Type UI-plug-in te gebruiken om een ​​aangepast berichttype te maken. Met deze plug-in heb je de mogelijkheid om een ​​aangepast berichttype te koppelen aan elke ingebouwde of aangepaste taxonomie, inclusief categorieën. Nadat je de plug-in hebt geïnstalleerd, ga je naar CPT UI »Posttypes toevoegen/bewerken om een ​​nieuw aangepast berichttype te maken of een bestaand berichttype te bewerken.</p> <p>Blader omlaag naar Geavanceerde opties en daar ziet u de optie Ingebouwde taxnomieën. Vink het vakje naast categorieën aan en sla uw berichttype op.</p> <p><img src='https://i0.wp.com/coma.lv/wp-content/uploads/2016/11/enablecategoriesforcpt.jpg' align="center" width="100%" loading=lazy loading=lazy></p> <h4>Handmatig categorieën toevoegen voor een aangepast berichttype</h4> <p>Als je een aangepast berichttype hebt gemaakt door code toe te voegen aan je function.php-bestand, dan zul je die code moeten wijzigen om de categorie toe te voegen als een ondersteunde taxonomie. Het enige wat je hoeft te doen is deze regel toevoegen aan je aangepaste berichttype-argumenten:</p> <p><i>‘taxonomieën’ => array(‘categorie’),</i></p> <p>Het is mogelijk dat u deze regel al in uw code heeft met een andere aangepaste taxonomie. Als dat zo is, hoeft u er alleen maar een komma achter te zetten en een categorie toe te voegen:</p> <p><i>‘taxonomieën’ => array(‘onderwerpen’, ‘categorie’),</i></p> <p>Hier is een voorbeeld van de hele code waarin we een aangepast berichttype hebben gemaakt met de naam 'films', met ondersteuning voor alle ingebouwde categorieën.</p><p>Functie custom_post_type() ( // Stel UI-labels in voor aangepast berichttype $labels = array("name" => _x("Movies", "Post Type General Name", "twentythirteen"), "singular_name" => _x(" Film", "Berichttype enkelvoudige naam", "twentythirteen"), "menu_name" => __("Films", "twentythirteen"), "parent_item_colon" => __("Ouderfilm", "twentythirteen"), "all_items " => __("Alle films", "twentythirteen"), "view_item" => __("Film bekijken", "twentythirteen"), "add_new_item" => __("Nieuwe film toevoegen", "twentythirteen"), "add_new" => __("Nieuw toevoegen", "twentythirteen"), "edit_item" => __("Film bewerken", "twentythirteen"), "update_item" => __("Film bijwerken", "twentythirteen") , "search_items" => __("Film zoeken", "twentythirteen"), "not_found" => __("Niet gevonden", "twentythirteen"), "not_found_in_trash" => __("Niet gevonden in prullenbak", " Twentythirteen")), // Andere opties instellen voor aangepast berichttype $args = array("label" => __("movies", "twentythirteen"), "description" => __("Filmnieuws en -recensies", "twentythirteen"), "labels" => $labels, "supports" => array("title", "editor", "uittreksel", "auteur", "thumbnail", "opmerkingen", "revisies", "aangepast -fields",), "hiërarchisch" => false, "public" => true, "show_ui" => true, "show_in_menu" => true, "show_in_nav_menus" => true, "show_in_admin_bar" => true, "menu_position " => 5, "can_export" => true, "has_archive" => true, "exclude_from_search" => false, "publicly_queryable" => true, "capability_type" => "page", // Dit is waar we taxonomieën toevoegen naar onze CPT "taxonomieën" => array("category"),); // Uw aangepaste berichttype registreren register_post_type("movies", $args); ) /* Sluit de actie "init" aan, zodat de functie * die onze posttyperegistratie bevat, * niet onnodig wordt uitgevoerd. */ add_action("init", "custom_post_type", 0);</p><h4>Meerdere berichttypen weergeven op een categoriepagina</h4> <p>Standaard geven categoriepagina's op een WordPress-site het standaard berichttype weer. Als je wilt dat je berichttype op dezelfde categoriepagina verschijnt als de standaardberichten, moet je de volgende code toevoegen aan je function.php-bestand:</p><p>Add_filter("pre_get_posts", "query_post_type"); function query_post_type($query) ( if(is_category()) ( $post_type = get_query_var("post_type"); if($post_type) $post_type = $post_type; else $post_type = array("nav_menu_item", "post", " films"); // vergeet nav_menu_item niet om menu's te laten werken! $query->set("post_type",$post_type); return $query; ) )</p><p>Vergeet niet om films te wijzigen in de naam van je aangepaste berichttype.</p> <p><i>Onze specialiteit is de ontwikkeling en ondersteuning van WordPress sites. Contacten voor gratis advies - ,</i></p> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </div> <div class="clear"></div> </div> </article> <div class='yarpp-related'> <section id="related_posts"> <div class="block-head"> <span>Meer informatie over het onderwerp</span> <div class="stripe-line"></div> </div> <div class="post-listing"> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/b5cf037f350ddbe269fde8b277e328f7.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Beheerde Applicatie Hoe u een nieuw objectformulier opent en op basis van iets invult" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/nl/upravlyaemoe-prilozhenie-upravlyaemoe-prilozhenie-kak-otkryt-formu/">Beheerde Applicatie Hoe u een nieuw objectformulier opent en op basis van iets invult</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/86371f85da4e5f67e4c2d9cd286f34bd.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Computer schokabsorberende groep" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/nl/mnogofunkcionalnoe-ustroistvo-okof-amortizacionnaya-gruppa/">Computer schokabsorberende groep</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/4c7f6edf94e729c5e5eee07c9ce8a63f.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Welke programma's zijn er voor het voltooien van taken op SeoSprint Programma voor het voltooien van taken op seosprint" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/nl/ispytaniya-ocherednogo-avtoklikera-dlya-seosprint-kakie-est/">Welke programma's zijn er voor het voltooien van taken op SeoSprint Programma voor het voltooien van taken op seosprint</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/dcc7fe5e4d6a4aaa05057114dd6304e2.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Een nieuwe gebruiker toevoegen en rechten aan hem toekennen" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/nl/1s-zup-gruppa-dostupa-fizicheskih-lic-dobavlenie-novogo-polzovatelya-i/">Een nieuwe gebruiker toevoegen en rechten aan hem toekennen</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/9af65881a708b76c9935ad6e7dcaf83a.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Kijk wat het is"половина байта" в других словарях" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/nl/strannye-edinicy-izmerenii-smotret-chto-takoe-polovina-baita-v-drugih/">Kijk wat "een halve byte" is in andere woordenboeken</a></div> <div class="related-item"> <div class="post-thumbnail tie-appear replacemy" data="post_7839"> <img width="195" height="110" src="/uploads/4562dbcc49e0ad3684faea8d28e06a27.jpg" class="attachment-tie-related size-tie-related wp-post-image" alt="Het is gebruikelijk om hiervoor remarketing te gebruiken" / loading=lazy loading=lazy></div> <a class="post_7839" href="https://qzoreteam.ru/nl/harakterno-ispolzovanie-remarketinga-dlya-teh-chto-takoe-remarketing/">Het is gebruikelijk om hiervoor remarketing te gebruiken</a></div> </div> </section> </div> <div id="comments"> <ol class="commentlist"> <div class='rreekk' rel='15'> <div id="smartrotator_ad_4" onclick="yaCounter40492595.reachGoal ('tizercommentbefore1'); return true;"></div> </div> </ol> <div class="clear"></div> <div id="respond" class="comment-respond"> </div> </div> </div> <aside id="sidebar"> <div class="theiaStickySidebar"> <div class="execphpwidget"> <div id="text-4" class="widget widget_text"> <div class="widget-top"> <span>Bruikbaar</span> <div class="stripe-line"></div> </div> <div class="widget-container"> <div class="textwidget"> <style> .wpp-list li img { -webkit-border-radius: 65px; -moz-border-radius: 65px; border-radius: 65px; } .wpp-list li .post-views { display: block; margin-left: 70px; color: #828283; font-size: 12px; } .wpp-list li .post-views i { font-size: 13px; } .wpp-list li { line-height: 22px !important; } .replacemy { cursor: pointer; } } </style> <ul class="wpp-list"> <li> <div class="replacemy"><img src="/uploads/12c552199ac8b53f17cfdcdcd26c6779.jpg" width="65" height="65" title="Uitwisseling tussen Zup 3.0 en Bukh" alt="Uitwisseling tussen Zup 3.0 en Bukh" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/nl/obmen-mezhdu-zup-3-0-i-buh/" class=""><br>Uitwisseling tussen Zup 3.0 en Bukh</a></li> <li> <div class="replacemy"><img src="/uploads/b240b74ec922532d5e8bce66ced6cf26.jpg" width="65" height="65" title="Kenmerken van de functie substring() Functies voor het werken met strings in 1c-query's" alt="Kenmerken van de functie substring() Functies voor het werken met strings in 1c-query's" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/nl/osobennost-vypolneniya-funkcii-podstroka-osobennost/" class=""><br>Kenmerken van de functie substring() Functies voor het werken met strings in 1c-query's</a></li> <li> <div class="replacemy"><img src="/uploads/07ed9e3ce5be21b07815fb3987b4dc01.jpg" width="65" height="65" title="Publicaties Lay-outs van gedrukte formulieren 1s 8" alt="Publicaties Lay-outs van gedrukte formulieren 1s 8" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/nl/publikacii-publikacii-makety-pechatnyh-form-1s-8-3/" class=""><br>Publicaties Lay-outs van gedrukte formulieren 1s 8</a></li> <li> <div class="replacemy"><img src="/uploads/50f0b01872a733434658702994563327.jpg" width="65" height="65" title="Hoe open ik een lijstformulier met enige selectie?" alt="Hoe open ik een lijstformulier met enige selectie?" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/nl/otkryt-spravochnik-s-otborom-1s-upravlyaemye-formy-kak-otkryt-formu-spiska-s/" class=""><br>Hoe open ik een lijstformulier met enige selectie?</a></li> <li> <div class="replacemy"><img src="/uploads/ba06dfe809b603b31d5b8b71eaf77d95.jpg" width="65" height="65" title="Variabele veranderingsmethode in onbepaalde integraal" alt="Variabele veranderingsmethode in onbepaalde integraal" class="wpp-thumbnail wpp_cached_thumb wpp_featured" / loading=lazy loading=lazy></div><a href="https://qzoreteam.ru/nl/metod-zameny-peremennoi-v-neopredelennom-integrale-primery/" class=""><br>Variabele veranderingsmethode in onbepaalde integraal</a></li> </ul> </div> </div> </div> </div> </div> <div> </div> </aside> <div class="clear"></div> </div> <footer id="theme-footer"> <div id="footer-widget-area" class="wide-narrow-2c"><div id="footer-first" class="footer-widgets-box"><div id="text-2" class="footer-widget widget_text"><div class="footer-widget-top"></div><div class="footer-widget-container"><div class="textwidget"> <p>Alles over moderne technologie. Fouten. Spellen. Storingen. Techniek. Internet <p></p> </div></div></div></div><div id="footer-second" class="footer-widgets-box"><div id="text-3" class="footer-widget widget_text"> <div class="footer-widget-top"></div> <div class="footer-widget-container"> <div class="textwidget"><a href="https://qzoreteam.ru/nl/sitemap.xml">Sitemap</a></div> </div> </div><div id="text-7" class="footer-widget widget_text"><div class="footer-widget-top"></div><div class="footer-widget-container"><div class="textwidget"><br> <a href="https://qzoreteam.ru/nl/feedback/">Feedback</a> </div></div></div></div></div><div class="clear"></div> </footer> <div class="clear"></div> <div class="footer-bottom"> <div class="container"> <div class="alignright"></div> <div class="alignleft">© Copyright 2017, https://qzoreteam.ru</div> <div class="clear"></div> </div> </div> </div> </div> </div> <div id="topcontrol" class="fa fa-angle-up" title="Ga naar de bovenkant van de pagina"></div> <div id="fb-root"></div> <script type="text/javascript"> jQuery(function($) { $(document).on("click", ".pseudo-link", function() { window.open($(this).data("uri")); }); }); </script> <script type='text/javascript'> /* */ var tocplus = { "smooth_scroll": "1", "visibility_show": "\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c", "visibility_hide": "\u0441\u043a\u0440\u044b\u0442\u044c", "width": "310px" }; /* */ </script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/plugins/table-of-contents-plus/front.min.js'></script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/plugins/wp-polls/polls-js.js'></script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/plugins/wp-postratings/js/postratings-js.js'></script> <script type='text/javascript'> /* */ var tie = { "mobile_menu_active": "true", "mobile_menu_top": "", "lightbox_all": "", "lightbox_gallery": "", "woocommerce_lightbox": "", "lightbox_skin": "dark", "lightbox_thumb": "vertical", "lightbox_arrows": "true", "sticky_sidebar": "", "is_singular": "1", "SmothScroll": "true", "reading_indicator": "", "lang_no_results": "\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c", "lang_results_found": "\u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b" }; /* */ </script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/themes/pochk/js/tie-scripts.js'></script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/themes/pochk/js/ilightbox.packed.js'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js'></script> <script type='text/javascript'> /* */ var gglcptch_pre = { "messages": { "in_progress": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0434\u043e\u0436\u0434\u0438\u0442\u0435\u0441\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 Google reCAPTCHA.", "timeout": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c Google reCAPTCHA. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0412\u0430\u0448\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0435\u0442\u0438 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443." } }; /* */ </script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/plugins/google-captcha/js/pre-api-script.js'></script> <script type='text/javascript' data-cfasync="false" async="async" defer="defer" src='https://www.google.com/recaptcha/api.js?onload=gglcptch_onload_callback&render=explicit'></script> <script type='text/javascript' src='https://qzoreteam.ru/wp-content/plugins/google-captcha/js/script.js'></script> <script type="text/javascript" src="https://qzoreteam.ru/wp-content/themes/pochk/my/my.js"></script> <script type="text/javascript" src="https://qzoreteam.ru/wp-content/themes/pochk/my/etimer.js"></script> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="https://www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><br> <br> </body> </html>