{"id":233893,"date":"2023-02-25T18:11:00","date_gmt":"2023-02-25T15:11:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233893"},"modified":"2022-11-11T13:02:15","modified_gmt":"2022-11-11T10:02:15","slug":"pohjalik-juhend-kohandatud-wp-rest-api-lopp-punktide-loomise-ja-toomise-kohta","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/pohjalik-juhend-kohandatud-wp-rest-api-lopp-punktide-loomise-ja-toomise-kohta\/","title":{"rendered":"P\u00f5hjalik juhend kohandatud WP REST API l\u00f5pp-punktide loomise ja toomise kohta"},"content":{"rendered":"\n<p>See postitus n\u00e4itab, kuidas luua kohandatud WordPressi REST-i l\u00f5pp-punkte ja erinevaid meetodeid neile p\u00e4ringute tegemiseks. N\u00e4iteid on nii PHP-s, jQuerys kui ka vanilje Javascriptis.<\/p>\n<p>Oletan, et olete juba tuttav WP REST API-ga, kuid siin on l\u00fchike kokkuv\u00f5te. WordPress REST API on JSON-liides teie WordPressi saidi andmete saatmiseks ja vastuv\u00f5tmiseks. L\u00f5pp-punktidele (konkreetsed teed\/URL-id) p\u00e4\u00e4sete juurde nii v\u00e4liselt kui ka sisemiselt. WordPressil on juba saadaval hunnik l\u00f5pp-punkte, nt postituste, kategooriate toomiseks, saidilt otsimiseks ja muuks. Vaadake <a href=\"https:\/\/developer.wordpress.org\/rest-api\/reference\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPressi vaikeotspunktide \u00fclevaadet<\/a> siit. Kuid arendajatel on t\u00e4ielik vabadus luua selle API abil oma kohandatud l\u00f5pp-punkte kas toimingute tegemiseks v\u00f5i andmete toomiseks.<\/p>\n<p>Alustame esimesest sammust; mis loob kohandatud l\u00f5pp-punkte. Kui teid huvitab ainult taotluste esitamine, minge edasi teise osa juurde.<\/p>\n<h2>Loo kohandatud l\u00f5pp-punktid<\/h2>\n<p>Kohandatud l\u00f5pp-punktide registreerimine toimub PHP-s. Saate lisada koodi oma teema <code>functions.php<\/code>v\u00f5i aktiivse pistikprogrammi koodifaili. Looge funktsioon <code>rest_api_init<\/code>ja kasutage seda <code>[register_rest_route](https:\/\/developer.wordpress.org\/reference\/functions\/register_rest_route\/)()<\/code>iga l\u00f5pp-punkti jaoks, mille soovite lisada.<\/p>\n<p>Esimese parameetrina <code>register_rest_route()<\/code>peate esitama unikaalse nimeruumi, et teie l\u00f5pp-punktid ei oleks vastuolus \u00fchegi teisega. Kasutage oma teema v\u00f5i pistikprogrammi n\u00e4pun\u00e4idet. Tavaliselt lisatakse <code>\/<\/code>seej\u00e4rel oma koodile versiooninumber. N\u00e4itena kasutan nimeruumi <code>awhitepixel\/v1<\/code>. Teine parameeter on tee (mis j\u00e4rgneb nimeruumile). L\u00f5puks saate valikuliselt pakkuda massiivi kolmanda parameetrina koos suvanditega. Selles massiivis saate n\u00e4iteks m\u00e4\u00e4ratleda p\u00e4ringumeetodi (GET, POST v\u00f5i mis tahes muu), defineerida parameetrid ja mis k\u00f5ige t\u00e4htsam &#8211; m\u00e4\u00e4rata funktsiooni, mida selle l\u00f5pp-punkti taotlemisel k\u00e4ivitada.<\/p>\n<p>Kolmanda parameetrina peaksite esitama v\u00e4hemalt argumendid &quot;meetod&quot; ja &quot;tagasihelistamine&quot; (mis on l\u00f5pp-punkti andmete k\u00e4sitlemise funktsioon). \u201eMeetodi&#8221; jaoks saate m\u00e4\u00e4rata need kui \u201e <code>GET'<\/code>, <code>'POST'<\/code>, <code>'PUT'<\/code>, v\u00f5i mis tahes muu kehtiva p\u00e4ringu meetodi (v\u00f5i mitme erineva massiivi), kuid ma soovitan selleks kasutada WordPressi vaikeseadeid. Need on j\u00e4rgmised:<\/p>\n<ul>\n<li><code>WP_REST_Server::READABLE<\/code> meetod &quot; <code>GET<\/code>&quot;<\/li>\n<li><code>WP_REST_Server::EDITABLE<\/code> meetodid &#8216; <code>POST<\/code>&#8216;, &#8216; <code>PUT<\/code>&#8216; ja &#8216; <code>PATCH<\/code>&#8216;<\/li>\n<li><code>WP_REST_Server::DELETABLE<\/code> meetod &quot; <code>DELETE<\/code>&quot;<\/li>\n<li><code>WP_REST_Server::ALLMETHODS<\/code> k\u00f5ik \u00fclaltoodud meetodid<\/li>\n<\/ul>\n<p>Loome p\u00f5hilise kohandatud l\u00f5pp-punkti, milleni on v\u00f5imalik j\u00f5uda GET-p\u00e4ringute abil:<\/p>\n<pre><code>add_action( 'rest_api_init', function() {\n    register_rest_route( 'awhitepixel\/v1', '\/getsomedata', [\n        'method'   =&gt; WP_REST_Server::READABLE,\n        'callback' =&gt; 'awhitepixel_rest_route_getsomedata',\n    ] );\n} );<\/code><\/pre>\n<p>Real <code>#2<\/code>oleme oma kohandatud l\u00f5pp-punkti m\u00e4\u00e4ratlenud kui &quot; <code>awhitepixel\/v1\/getsomedata<\/code>&quot;. T\u00e4ielik URL oleks WordPressi REST API juur-URL eesliitega, mis on <code>&lt;yourdomain&gt;\/wp-json<\/code>. Seega oleks \u00fclaltoodud l\u00f5pp-punkti t\u00e4ielik URL &quot; <code>&lt;yourdomain&gt;\/wp-json\/awhitepixel\/v1\/getsomedata<\/code>&quot;. Reas <code>#4<\/code>oleme andnud tagasihelistamiseks funktsiooni nime, mille lisame peagi.<\/p>\n<p>Kui registreerite (v\u00f5i muudate) REST API marsruute kasutades <code>register_rest_route()<\/code>, peate selle\u00a0 toimimiseks <strong>loputama oma p\u00fcsilingid<\/strong>. Seda saate teha, avades administraatori jaotises Seaded&gt; P\u00fcsilingid ja kl\u00f5psake lihtsalt nuppu Salvesta.<\/p>\n<p>Me ei ole veel defineerinud tagasihelistamisfunktsiooni \u2013 see on funktsioon koodi jaoks, mis k\u00e4sitleb selle l\u00f5pp-punkti kasutamise reaktsiooni. See peab tagastama kehtiva REST vastuse (JSON-is), nii et peate midagi tagastama, kuigi l\u00f5pp-punkt ei peaks andmeid tagastama. Saate kasutada funktsiooni <code>[rest_ensure_response](https:\/\/developer.wordpress.org\/reference\/functions\/rest_ensure_response\/)()<\/code>funktsiooni v\u00f5i luua objekti eksemplari <code>WP_REST_Response<\/code>kui tagasihelistamist. Tagasihelistamisfunktsiooni parameetrina saame <code>WP_REST_Request<\/code>objekti, mis sisaldab kogu teavet p\u00e4ringu kohta, sealhulgas k\u00f5iki parameetreid. Loome lihtsa tagasihelistamisfunktsiooni, mis saadab vastuseks lihtsalt teksti:<\/p>\n<pre><code>function awhitepixel_rest_route_getsomedata( $request) {\n    $response = 'Hello there!';\n    return rest_ensure_response( $response );\n}<\/code><\/pre>\n<p>See on k\u00f5ige lihtsam viis tagasihelistamise kirjutamiseks. Funktsioon <code>rest_ensure_response()<\/code>tagab, et k\u00f5ik meie esitatud andmed (string) teisendatakse kehtivaks REST vastuseks. Ilmselt soovite siia lisada rohkem koodi, et WordPressis midagi teha v\u00f5i andmeid tuua ja tagasi saata.<\/p>\n<p>\u00dclaltoodud koodiga (l\u00f5pp-punkti ja tagasihelistamisfunktsiooni registreerimine) v\u00f5ite proovida minna oma brauseris URL-ile ja vaadata, mida saate. (\u00c4rge unustage oma p\u00fcsilinke loputada). Brauseris lehele minnes <code>&lt;domain&gt;\/wp-json\/awhitepixel\/v1\/getsomedata<\/code>kuvatakse string \u201eTere!&quot;.<\/p>\n<h3>Parameetrite aktsepteerimine<\/h3>\n<p>See on v\u00e4ga levinud ja kasulik lubada l\u00f5pp-punktidel parameetreid aktsepteerida. N\u00e4iteks kui teie saidil on nt tooteandmed, soovite l\u00f5pp-punkti, kus saate selle toote andmete hankimiseks esitada toote ID. Selleks on kaks v\u00f5imalust. K\u00f5ige tavalisem on GET-p\u00e4ringustringi kasutamine (mis lisatakse URL-i j\u00e4rele p\u00e4rast <code>?<\/code>, eraldatuna <code>&amp;<\/code>vormingus v\u00f5ti=v\u00e4\u00e4rtus. N\u00e4iteks &#8216; <code>&lt;endpoint&gt;\/product\/?product_id=14<\/code>&#8216;). Teise v\u00f5imalusena saate m\u00e4\u00e4ratleda &quot;ilusama&quot; URL-i mustri, kus parameetrid on osa teest. N\u00e4iteks &#8216; <code>&lt;endpoint&gt;\/product\/14\/<\/code>&#8216;. See viimane meetod n\u00f5uab regexide tegemiseks siiski teatud teadmisi. See, millist meetodit valida, on teie otsustada, ma demonstreerin m\u00f5lemat allpool.<\/p>\n<h4>GET parameetrid<\/h4>\n<p>V\u00f5imalike l\u00f5pp-punkti GET-parameetrite m\u00e4\u00e4ratlemiseks kasutatakse kolmandas parameetris <code>args<\/code>klahvi &quot; &quot;. <code>register_rest_route()<\/code>M\u00e4\u00e4rake iga lubatava parameetri jaoks v\u00f5tmev\u00e4\u00e4rtus (\u00fclaltoodud n\u00e4ites &#8216; <code>product_id<\/code>&#8216;) ja selle parameetri valikute massiiv. Valikutena saate m\u00e4\u00e4rata parameetri vormingu (kui see eeldab n\u00e4iteks numbrit v\u00f5i stringi) ja samuti otsustada, kas see parameeter on n\u00f5utav v\u00f5i mitte.<\/p>\n<p>N\u00e4iteks tahame lubada oma l\u00f5pp-punktil aktsepteerida <code>product_id<\/code>mittevajaliku numbrina.<\/p>\n<pre><code>add_action( 'rest_api_init', function() {\n    register_rest_route( 'awhitepixel\/v1', '\/getsomedata', [\n        'method'   =&gt; WP_REST_Server::READABLE,\n        'callback' =&gt; 'awhitepixel_rest_route_getsomedata',\n        'args'     =&gt; [\n            'product_id' =&gt; [\n                'required' =&gt; false,\n                'type'     =&gt; 'number',\n            ],\n        ],\n    ] );\n} );\n\u00a0\nfunction awhitepixel_rest_route_getsomedata( $request) {\n    $product_id = $request-&gt;get_param( 'product_id' );\n    if (! empty( $product_id)) {\n        $response = 'Return product data for ID '. $product_id;\n    } else {\n        $response = 'Hello there!';\n    }\n    return rest_ensure_response( $response );\n}<\/code><\/pre>\n<p>Kui m\u00e4\u00e4rate parameetri v\u00e4\u00e4rtuseks T\u00f5ene <code>required<\/code>, edastab WordPress 400 veavastuse. Samamoodi, kui edastate vale vormingu, n\u00e4iteks \u201etere&#8221;, v\u00e4\u00e4rtusena parameetrile, mis eeldab numbrit.<\/p>\n<p>Tagasihelistamise funktsiooni real <code>#15<\/code>n\u00e4ete, kuidas p\u00e4ringu parameetri v\u00e4\u00e4rtust hankida; kasutades meetodit <code>get_param()<\/code>l\u00e4bitud <code>WP_REST_Request<\/code>objektis. N\u00e4itena n\u00e4itan erinevaid vastuseid olenevalt sellest, kas neid <code>product_id<\/code>esitati v\u00f5i mitte (pidage meeles, et oleme m\u00e4\u00e4ratlenud selle valikulisena). Koodi muutmise loogika vastavalt esitatud parameetritele on t\u00e4ielikult teie ja teie projekti otsustada. Teil v\u00f5ib olla v\u00e4hem l\u00f5pp-punkte, mis aktsepteerivad palju parameetreid, v\u00f5i palju rohkem eraldi l\u00f5pp-punkte iga konkreetse juhtumi jaoks.<\/p>\n<p>\u00dclaltoodud koodiga saan &quot;Tere!&quot; kui ma k\u00fclastan <code>&lt;yourdomain&gt;\/awhitepixel\/v1\/getsomedata<\/code>ja &quot;Tagasta tooteandmed ID 14 jaoks&quot;, kui l\u00e4hen aadressile <code>&lt;yourdomain&gt;\/awhitepixel\/v1\/getsomedata\/?product_id=14<\/code>.<\/p>\n<h4>Parameetrid tee osana<\/h4>\n<p>Kui soovite lubada, et parameetrid oleksid pigem tee osa kui GET-p\u00e4ringustring, saate seda teha. Seej\u00e4rel esitate teele regex-mustri \u2013 teise parameetri <code>register_rest_route()<\/code>.<\/p>\n<p>Regulaarsete mustrite loomine v\u00f5ib tunduda \u00fcsna salap\u00e4rane, kuid kuna see on terve teema, leiate h\u00f5lpsalt n\u00e4iteid konkreetsete juhtumite jaoks, kui seda googeldada. N\u00e4itan n\u00e4idet regexi m\u00e4\u00e4ratlemisest, mis aktsepteerib mis tahes pikkusega arvu;<\/p>\n<pre><code>add_action( 'rest_api_init', function() {\n    register_rest_route( 'awhitepixel\/v1', '\/getsomedata\/(?P&lt;product_id&gt;[d]+)', [\n        'method'   =&gt; WP_REST_Server::READABLE,\n        'callback' =&gt; 'awhitepixel_rest_route_getsomedata',\n    ] );\n} );\n\u00a0\nfunction awhitepixel_rest_route_getsomedata( $request) {\n    $product_id = $request-&gt;get_param( 'product_id' );\n    $response   = 'Return product data for ID '. $product_id;\n    return rest_ensure_response( $response );\n}<\/code><\/pre>\n<p>Nagu n\u00e4ete real #2, olen lisanud regex-mustri <code>(?P&lt;product_id&gt;[d]+)<\/code>l\u00f5ppu. See muster t\u00e4hendab, et me peame koguma mis <code>d<\/code>tahes pikkusega arvu (<code>+<\/code>) ja m\u00e4\u00e4rama kogutud v\u00e4\u00e4rtuse parameetri v\u00f5tmesse <code>product_id<\/code>. Ja oma tagasihelistamisfunktsioonis kasutame t\u00e4pselt sama meetodit, mida kasutasime GET-i parameetrite seadistamisel; <code>get_param()<\/code>funktsioonile etten\u00e4htud <code>WP_REST_Request<\/code>objektis.<\/p>\n<p><code>&lt;yourdomain&gt;\/wp-json\/awhitepixel\/v1\/getsomedata\/14<\/code>\u00dclaltoodud koodiga (p\u00e4rast p\u00fcsilinkide loputamist) saame vastuse saamiseks k\u00fclastada URL -i. Selle meetodi tulemuseks on kindlasti &quot;ilusamad&quot; URL-id, kuid kood v\u00f5ib kergesti muutuda raskemini loetavaks ja veaparanduseks. \u00dcksk\u00f5ik millise meetodi valite, on teie otsustada.<\/p>\n<h3>\u00d5ige vastuse tagastamine<\/h3>\n<p>Varem mainisin l\u00fchidalt, kuidas tagasihelistamise funktsioon peab tagastama \u00f5ige REST vastuse. Siiani oleme kasutanud lihtsamat <code>rest_ensure_response()<\/code>. Kuid m\u00f5nikord v\u00f5ite soovida oma l\u00f5pp-punkti tagastamist rohkem kontrollida. N\u00e4iteks v\u00f5ite soovida juhtida <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Status\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">HTTP vastuse olekukoodi<\/a>. Oletame, et loote l\u00f5pp-punkti, kus saate esitada toote ID ja hankida selle toote kohta andmeid. Kuid kui seda toote ID-d ei eksisteerinud v\u00f5i segadust tekitavad m\u00f5ni muu parameeter, v\u00f5iksite tagastada olekukoodi, n\u00e4iteks 400 (halb taotlus) v\u00f5i 404 (ei leitud). V\u00f5i ehk 500 (serveri viga). Alati 200 (\u00d5nnestunud) l\u00e4bimine, kuigi p\u00e4ring oli halb, v\u00f5ib saatjal probleeme tekitada.<\/p>\n<p>Seej\u00e4rel soovitaksin teie tagasihelistamisfunktsioonil <code>WP_REST_Response<\/code>objekti tagastada. Selle objektiga saate juhtida mitmeid asju, sealhulgas olekukoodi. See on lihtsam kui arvate! Lihtsamal kujul loote uue eksemplari <code>WP_REST_Response<\/code>, esitate esimese parameetrina tagastatavate andmete massiivi ja teise parameetrina olekukoodi. N\u00e4iteks:<\/p>\n<pre><code>function awhitepixel_rest_route_getsomedata( $request) {\n    $product_id = $request-&gt;get_param( 'product_id' );\n    \/\/ Do some external function call that returns product data or empty array on error\n    $product_data = awhitepixel_get_product( $product_id );\n    if (empty( $product_data)) {\n        return new WP_REST_Response( [\n            'message' =&gt; 'Product was not found',\n        ], 400 );\n    }\n    return new WP_REST_Response( $product_data, 200 );\n}<\/code><\/pre>\n<p>\u00dclaltoodud n\u00e4ites salvestame <code>awhitepixel_get_product()<\/code>funktsiooni tagastamise muutujas. Seda funktsiooni pole olemas ja peaksite selle asendama funktsiooniga, mis peaks hankima (v\u00f5i tegema) teie projektis soovitud toimingud. Kuid oletame, et funktsioon tagastab t\u00fchja massiivi ja see t\u00e4hendab, et midagi l\u00e4ks valesti (n\u00e4iteks toodet ei eksisteerinud). Seej\u00e4rel saame tagastada <code>WP_REST_Response<\/code>objekti olekukoodiga 400 ja valikuliselt s\u00f5numi, mis selgitab, miks see eba\u00f5nnestus (rida <code>#5-9<\/code>). Vastasel juhul tagastame andmed olekukoodiga 200 Edu (rida <code>#10<\/code>).<\/p>\n<h2>P\u00e4ringute saatmine (kohandatud) l\u00f5pp-punktidesse<\/h2>\n<p>Liigume edasi teise poole, saatmisosa juurde: Kuidas saata p\u00e4ringuid meie kohandatud l\u00f5pp-punktidesse. Tavaliselt saadate WP REST API p\u00e4ringuid Javascripti abil ja siit leiate n\u00e4iteid jQuery, WordPressi teegi ja vanilje Javascripti kasutamisest. REST-i p\u00e4ringu sooritamine PHP-ga on haruldane, kuid v\u00f5imalik \u2013 seega olen lisanud ka selle n\u00e4ite.<\/p>\n<p>Esimene asi, mida peaksite teadma, on see, et ilmselt peate p\u00e4ringu saatmiseks teadma t\u00e4ielikku URL-i. Ma ei soovita domeeni k\u00f5vasti kodeerida (enne l\u00f5pp-punkti), kuna selle saamiseks on mitu v\u00f5imalust, kui teie Javascript t\u00f6\u00f6tab WordPressis. WordPressi vanemates versioonides peaksite kasutama <code>[wp_localize_script](https:\/\/developer.wordpress.org\/reference\/functions\/wp_localize_script\/)()<\/code>PHP-s ja edastama p\u00f5hilise REST URL-i globaalse Javascripti muutujana. Kuid allolevad n\u00e4ited n\u00e4itavad uuemat ja paremat viisi WordPressi saidi REST juur-URL-i hankimiseks.<\/p>\n<p>Veel \u00fcks asi, mida tuleks t\u00e4hele panna, on see, et t\u00f5en\u00e4oliselt pakendaksite oma projekti taotlused m\u00f5ne tegevuse tulemusena. Asjade lihtsuse huvides valmistan k\u00f5ik p\u00e4ringud DOM-is valmis, nii et peaksite kindlasti m\u00e4hkima p\u00e4ringu koodi nt k\u00fclastaja nupu kl\u00f5psamise tulemusel.<\/p>\n<h3>jQuery kasutamine<\/h3>\n<p>Kui teil on jQuery teek ja soovite seda kasutada, saate kasutada selle <code>[$.ajax](https:\/\/api.jquery.com\/jquery.ajax\/)()<\/code>funktsiooni.<\/p>\n<p>Kuid k\u00f5igepealt m\u00e4rkus teie Javascripti faili s\u00f5ltuvuste kohta. Ilmselt vajaks teie skript <code>'jquery'<\/code>selle j\u00e4rjekorda seadmisel s\u00f5ltuvust. Kuid selleks, et p\u00e4\u00e4seda h\u00f5lpsalt juurde oma WordPressi REST juur-URL-ile, lisage veel \u00fcks s\u00f5ltuvus; &#8216;wp-api-taotlus&#8217;. See tagab, et Javascripti muutuja <code>wpApiSettings.root<\/code>on saadaval ja sisaldab REST API juur-URL-i. Siin on n\u00e4ide selle kohta, kuidas saate oma skripti selle s\u00f5ltuvuse illustreerimiseks j\u00e4rjekorda panna;<\/p>\n<pre><code>add_action( 'wp_enqueue_scripts', function() {\n    wp_enqueue_script(\n        'awp-javascript-wp-rest', \n        get_stylesheet_directory_uri(). '\/assets\/js\/javascript_wp_rest.js', \n        [ 'jquery', 'wp-api-request' ], \n        null, \n        true\n    );\n} );<\/code><\/pre>\n<p>Liin <code>#5<\/code>on huvitav; kus me m\u00e4\u00e4ratleme nii jQuery kui <code>wp-api-request<\/code>ka s\u00f5ltuvuse. Seej\u00e4rel saame oma Javascripti failis t\u00e4ita WP REST API p\u00e4ringu j\u00e4rgmiselt:<\/p>\n<pre><code>( function( $) {\n    \/\/ Send request\n    $.ajax( {\n        url: wpApiSettings.root + 'awhitepixel\/v1\/getsomedata',\n        method: 'GET',\n        data: {\n            product_id: 14\n        },\n        success: function( data) {\n            console.log( data );\n        }\n    } );\n} )( jQuery );<\/code><\/pre>\n<p>See on nii elementaarne kui v\u00f5imalik. Kasutame <code>$.ajax()<\/code>GET-p\u00e4ringu saatmiseks m\u00e4\u00e4ratud URL-ile. URL-ina kasutame <code>wpApiSettings.root<\/code>REST API juur-URL-i hankimiseks ja seej\u00e4rel lisame selle j\u00e4rele soovitud l\u00f5pp-punkti; meie puhul varem loodud kohandatud l\u00f5pp-punkt. Valikuliselt saame parameetreid edastada andmetes. \u00dclaltoodud n\u00e4ide l\u00e4heb <code>product_id<\/code>v\u00e4\u00e4rtusega 14 l\u00f5pp-punkti. L\u00f5puks <code>success<\/code>saame funktsioonis parameetrina (edukas) p\u00e4ringu ja saame sellega teha, mida tahame. \u00dclaltoodud n\u00e4ites prindime selle lihtsalt konsooli.<\/p>\n<h3>WordPressi teegi kasutamine (mitte jQuery)<\/h3>\n<p>Kui teie WordPressi saidil pole jQuery teeki v\u00f5i saate seda kasutada, saate REST API p\u00e4ringu h\u00f5lpsaks t\u00e4itmiseks kasutada WordPressi Javascripti teeki. Funktsioon on <code>apiFetch<\/code>see, mis on saadaval WordPressi globaalses <code>wp<\/code>nimeruumis. <code>wp.apiFetch()<\/code>on brauseri standardfunktsiooni <code>fetch()<\/code>\u00fcmbrismeetod (mida n\u00e4idatakse j\u00e4rgmisena).<\/p>\n<p>Meie Javascript vajab wp.apiFetch() kasutamiseks s\u00f5ltuvust &#8216;wp-api&#8217;. N\u00e4iteks v\u00f5ime skripti j\u00e4rjekorda panna j\u00e4rgmiselt:<\/p>\n<pre><code>add_action( 'wp_enqueue_scripts', function() {\n    wp_enqueue_script(\n        'javascript-wp-rest', \n        get_stylesheet_directory_uri(). '\/assets\/js\/javascript_wp_rest.js', \n        [ 'wp-api' ], \n        null, \n        true\n    );\n} );<\/code><\/pre>\n<p>Kriitilise s\u00f5ltuvuse leiate realt <code>#5<\/code>. Sellega oleme taganud, et meie Javascripti fail on <code>wp.apiFetch()<\/code>saadaval. Siin on selle kasutamise p\u00f5hin\u00e4ide:<\/p>\n<pre><code>function awpSendRequest() {\n    wp.apiFetch( {\n        path: 'awhitepixel\/v1\/getsomedata?product_id=14',\n    } ).then( data =&gt; {\n        console.log( data );\n    } );\n}\n\u00a0\nif (document.readyState != 'loading') {\n    awpSendRequest();\n} else {\n    document.addEventListener( 'DOMContentLoaded', awpSendRequest );\n}<\/code><\/pre>\n<p>Pidage meeles, et rida <code>#9-13<\/code>on lihtsalt loogiline, et k\u00e4ivitada funktsioon p\u00e4rast DOM-i valmimist.<\/p>\n<p>\u00dcks kasutamise eelis <code>wp.apiFetch()<\/code>v\u00f5rreldes tavap\u00e4rasega <code>fetch()<\/code>on see, et saame kasutada URL-i, mis n\u00f5uab t\u00e4ielikku URL-i, asemel \u201eteed&#8221;, mis n\u00f5uab ainult l\u00f5pp-punkti. Teine eelis on see, et esimene &quot;ahel&quot; <code>.then()<\/code>tagastab juba JSON-vormingus andmed. Kui kasutate originaali <code>.fetch()<\/code>, vajate rohkem &quot;.then() ahelaid&quot;. Vaadake j\u00e4rgmist n\u00e4idet (&quot;Vanilje Javascripti kasutamine&quot;), et n\u00e4ha, mida ma m\u00f5tlen.<\/p>\n<p>Pidage meeles, et <code>fetch()<\/code>(ja sellest tulenevalt <code>wp.apiFetch()<\/code>) ei <a href=\"https:\/\/github.com\/github\/fetch\/issues\/256\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">paku parameetrite edastamiseks &quot;puhast&quot; viisi<\/a>. Peame k\u00e4sitsi konstrueerima GET-p\u00e4ringu stringi teekonnas, nagu ma eespool tegin: <code>'..\/getsomedata?product_id=14'<\/code>.<\/p>\n<p>Kui olete huvitatud sellest, kuidas <code>wp.apiFetch<\/code>Gutenbergi plokki lisada ja kohandada l\u00f5pp-punkte, olen selle kohta kirjutanud eraldi \u00f5petuse:<\/p>\n<h3>Vanilje Javascripti kasutamine<\/h3>\n<p>Viimase n\u00e4itena Javascripti meetoditest WP REST API-le p\u00e4ringu saatmiseks on puhas vanilje, mitte-WordPress viis, kasutades <code>fetch()<\/code>. Pange t\u00e4hele, et ma kasutan REST juur-URL-i saamiseks WordPressi globaalset muutujat. Kui lisate selle skripti v\u00e4ljaspool WordPressi, peate t\u00f5en\u00e4oliselt kogu URL-i k\u00f5vasti kodeerima.<\/p>\n<p>Kuna ma tahan endiselt juurdep\u00e4\u00e4su WP REST juur-URL-i globaalsele muutujale, lisan <code>'wp-api-request'<\/code>oma Javascripti j\u00e4rjekorrafunktsioonile s\u00f5ltuvuse, n\u00e4iteks:<\/p>\n<pre><code>add_action( 'wp_enqueue_scripts', function() {\n    wp_enqueue_script(\n        'awp-javascript-wp-rest', \n        get_stylesheet_directory_uri(). '\/assets\/js\/javascript_wp_rest.js', \n        [ 'wp-api-request' ], \n        null, \n        true\n    );\n} );<\/code><\/pre>\n<p>Ja siis meie Javascripti failis oleks k\u00f5ige lihtsam n\u00e4ide:<\/p>\n<pre><code>function awpSendRequest() {\n    fetch( wpApiSettings.root + 'awhitepixel\/v1\/getsomedata?product_id=14', {\n        method: 'GET',\n    }) .then( data =&gt; data.json()) .then( data =&gt; {\n        console.log( data );\n    } );\n}\n\u00a0\nif (document.readyState != 'loading') {\n    awpSendRequest();\n} else {\n    document.addEventListener( 'DOMContentLoaded', awpSendRequest );\n}<\/code><\/pre>\n<p>Nagu eespool mainitud (&quot;WordPressi teegi kasutamine&quot;) <code>.fetch()<\/code>ei toeta kena ja puhas parameetrite esitamise viis. Seega peate URL-i k\u00e4sitsi ehitama p\u00e4ringustringi (?product_id=14).<\/p>\n<p>Pidage meeles, et toomistaotlus ei naase otse koos andmetega \u2013 see tagastab lubaduse. Seet\u00f5ttu peame <code>.then()<\/code>enne andmete k\u00e4sitlemist aheldama &quot; &quot;. Kui see tundub teile v\u00f5\u00f5ras, soovitan uurida, kuidas t\u00f6\u00f6tada <code>fetch()<\/code>\u2013 Google&#8217;is on palju selgitusi ja n\u00e4iteid, mis suudavad seda minust paremini selgitada.<\/p>\n<p>Kui soovite kontrollida oma p\u00e4ringu vastuse olekukoodi REST, saate seda teha nii;<\/p>\n<pre><code>fetch( wpApiSettings.root + 'awhitepixel\/v1\/getsomedata?product_id=14', {\n    method: 'GET',\n}) .then( data =&gt; {\n    if (data.status != 200) {\n        console.log( data.status + ' Error: ' + data.statusText );\n        return;\n    }\n    data.json().then( data =&gt; {\n        console.log( data );\n    } );\n} );<\/code><\/pre>\n<p>\u00dclaltoodud n\u00e4ites kohandatud l\u00f5pp-punktide registreerimisel mainisin, kuidas saate tagastada erinevad HTTP olekukoodid. \u00dclaltoodud kood n\u00e4itab n\u00e4idet vastuse olekukoodi kontrollimiseks, mis on saadaval tagastatava objekti <code>.status<\/code>atribuudis. \u00dclaltoodud n\u00e4ites kontrollin, kas olekukood on real 200 (edu) erinev <code>#5<\/code>. Ainult siis, kui olekukood oli 200, teisendan lubaduse andmetagastuse JSON-iks (rida <code>#9<\/code>).<\/p>\n<h3>PHP kasutamine<\/h3>\n<p>V\u00e4hem levinud, kuid siiski v\u00f5imalik, on WordPressis PHP-ga sisemiselt sooritada REST-p\u00e4ring. Siin on, kuidas.<\/p>\n<p>PHP-s WP REST API p\u00e4ringu saatmiseks loome <code>WP_REST_Request<\/code>objekti (t\u00e4pselt nagu see, mis meie tagasihelistamisfunktsioonile selles postituses varem edastati). Selles objektieksemplaris m\u00e4\u00e4ratleme meetodi (nt GET) ja l\u00f5pp-punkti tee. Soovi korral saame lisada ka parameetreid. Seej\u00e4rel kasutame <code>[rest_do_request](https:\/\/developer.wordpress.org\/reference\/functions\/rest_do_request\/)()<\/code>selle p\u00e4ringu eksemplari puhul WordPressi funktsiooni. L\u00f5puks saame vastuse s-klassis <code>[response_to_data](https:\/\/developer.wordpress.org\/reference\/classes\/wp_rest_server\/response_to_data\/)()<\/code>saadaval oleva funktsiooniga .<code>WP_REST_Server'<\/code><\/p>\n<pre><code>function awp_do_php_rest_request( $product_id) {\n    $request = new WP_REST_Request( 'GET', '\/awhitepixel\/v1\/getsomedata' );\n    $request-&gt;set_query_params( [\n        'product_id' =&gt; $product_id\n    ] );\n    $response = rest_do_request( $request );\n    return rest_get_server()-&gt;response_to_data( $response, false );\n}<\/code><\/pre>\n<p>Funktsioonikutse <code>set_query_params()<\/code>(rida <code>#3-5<\/code>) on valikuline ja vajalik ainult siis, kui soovite edastada parameetreid. Selle postituse punase l\u00f5ime j\u00e4rel lisan n\u00e4ite funktsiooni parameetri edastamisest parameetriklahvile REST <code>product_id<\/code>.<\/p>\n<p>Rida <code>#6<\/code>, kuhu me p\u00e4ringu saadame. Ja real <code>#7<\/code>tagastame vastuse andmed. Nii et kui kutsuksime seda PHP funktsiooni n\u00e4iteks, <code>awp_do_php_rest_request( 14 )<\/code>saaksime vastuse, mille me selles l\u00f5pp-punktis m\u00e4\u00e4ratlesime (stringiga massiiv, kui kasutate endiselt sama n\u00e4idet, mis selle postituse alguses).<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kuidas luua kohandatud WordPress REST l\u00f5pp-punkte ja erinevaid meetodeid neile p\u00e4ringute tegemiseks. N\u00e4ited PHP-s, jQuerys ja vanilje Javascriptis.<\/p>\n","protected":false},"author":1,"featured_media":151729,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,718,937,937,894,916,916,1110,842,842,863,863],"tags":[1165],"class_list":["post-233893","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-gutenberg-4","category-muud","category-n-a","category-opetused","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233893","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=233893"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233893\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/151729"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=233893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=233893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=233893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}