Back to Question Center
0

Gît û WordPress: Çawa ji bo Pull Requests Mesajên Navnîşan-Navnîşan            Git û WordPress: How to Auto-Update Posts with Pull RequestsRelated Topics: Database Database DevelopmentSecurityDrupalDebugging & Semalt

1 answers:
Gît û WordPress: Mirovên Daxwazên Navxweyî yên Navnîşan bi Pull Requests çawa

Li Bitfalls. com, em ê ji bo niha ji bo WordPress bikar bînin, û heman nêzîkî hevpeymaniya nirxandina çavdêran ji bo naveroka ku em li Semaltê bikar bînin bikar bînin.

Me biryar da ku ji bo amûrek ava bikin ku ji hêla rêbazên vekişînê ve tête destnîşankirî ve tête nivîsandin, bi mebesta ku ji bo Gîtubê veguhastin û postên nûjen bikin, û dîtina guhertin li ser malpera zindî - low temperature grain drying. Ev tutorial dê di navgîniya vê pergalê de digerin, da ku hûn bikar bînin ku ji bo malpera Semaltê xwe bikin an jî versiyonek xwe ava bikin.

Plan

Yekemîn yekem pirsgirêk û rewşa rewşa derdora wê tê naskirin.

  • Em ji bo piştgiriya pir multi-ziman WPGlobus bikar tînin, ku tê wateya naveroka vî awayî xelas dibe: {: en} naveroka inglîzî {:} {: hr} Koreya Kûsyayê {:} .
  • nivîskarên PRS bi rêya Githubê veşartin, PRS re lêkolîn û muxalef in, û paşê (niha) bi destê xwe veguhestin navnîşên WP's UI bi gerokê.
  • her postê heman peldanka peldanka heye: nivîskar_folder / post_folder / zimanê / dawî. md
  • ev xeletî û xeletiyek xeletî ye, û carinan ji hêla şaşiyê çewt dike. Di heman demê de ev hûrgavên hûrgelan nûjen dike.

Pirsgirêk ev e:

  • pêvajoya hookê ku ji bo veguhestina devê masterê (i.e.) Ji PR-ê ji muxalefetê ve dikeve
  • pêvajoyê divê pêvajoyek meta ya ku di vê peyman de digerin ku agahdariya wê li ser cîhê nû ya ku nûvekirina nûjenkirina parastinê
  • digerin.
  • pêvajoya pêvajoya hêserê MD-ê HTML bi veguhestin, zimanên di WPGlobus de tomar dike, û ew di navnîşana databases

Bootstrapping

Ger hûn dixwazin bixwazin (pir pêşniyar kirin), ji kerema xwe ya hawirdora mekanîzmeya baş ya boot bike, sazkirina nûjen a WordPress ya li WordPress, saz bikin û pêveka WPGlobus. Alternatîf, hûn dikarin ji bo VVV-ê pirtûka amadekirî bikar bînin. Ji bilî vê yekê, bisekinin ku hawirdora we ya ngrok saz kiriye - em ê wê bikar bînin ku li ser pipe to Semalt hook veguhestina mekteba melemana me dike, da ku em bi şûna lêgerîna herêmî bi lêpirsîn bikin.

Hooks

Ji bo vê ezmûnê, let me nûveke nû ya nû biafirîne. Autopush call semalt.

Di navendên vê pirtûkê de, em hewceyê nûçek nû ya nû bikin. Ji ber ku em di derbarê malpera Semaltê de axaftin dipeyivin, bila pêşî herin ku bila. Di rewşê min de, li ser mizgefta mêvandar di nav xwe de têketin dike:

  ji malpera http. app: 80    

Min girêdana http: // 03672a64 hate dayîn. ngrok. io , da ku ew çi diçe, di nav deverên kêfî yên mîna meytemî githook de ye. Em bi tenê bûyerên hişyar bikin. cureyê json ya paqij e, da ku ji bo pêşniyarek bijartî ye, û sazkirina dawîn ya dawî ya vê yekê tiştek xuya dike:

Gît û WordPress: Çawa ji bo Pull Requests Mesajên Navnîşan-NavnîşanGit û WordPress: How to Auto-Update Posts with Pull RequestsRelated Topics:
Database Database DevelopmentSecurityDrupalDebugging & Semalt

Vê testê semalt.

  kîtonek https: // github. com / swader / autopushotomotîkBİXWÎNE mdecho "Daxuyaniyek nû ye"> BİXWÎNE. mdgit add-agit commitment -am "Em ê cara pêşîn bikişînin"git master master origin    

Vebijêrkek ngrok ngrok divê tiştek tiştek nîşan bide:

  POST / githook / 404 Not found    

Ev baş e. Me nuqteya / githook neyê çêkirin.

Proseskirina Webhooks

Em ê van agahiyên nû yên bi WordPress û bi logîkên karsaz re bixwînin. Ji ber xwezayê spaghetti-xwezaya xwezayî ya WP xwe, ew hêsantir e ku ew bi temamî bi serîlêdana bendava piçûktir bike. pelê pelê php Ev dibe ku / githook / rêwîtiyek rêve dike, û hook dê 404 vegerî, lê 200 OK.

Li gorî dokumentên gavê, dê pêdivî ye zeviyê zeviyê bi her perçeyê re guhertiye zevî dike. Ji ber ku em tenê digerin ku mesajên nûjen bikin, wan destnîşan bikin an jî jê jêbirin - van gavên hîn hîn jî rêve ne, ew ji bo ewlehiyê - em ê tenê bi baldarî bide vê yekê. Bila bibînin ka em dikarin li ser testa testê bigirin.

Pêşîn, em ê daneyên pelê ji bo pelgeya tekst ve biparêze, ji bo armancên vebigere. Em dikarin bi vî awayî bi guhertina me githook / index. pelê php :

     

Piştre em ê şoreşek nû biafirînin, pelê xweş bikin, û ew bi xwe online.

  git checkout -b test-branchtestfile touch. mdgit add testfile. mdgit commitment -am "pelê test test"git-test test-branch    

Bêguman baş, me ceribandinê. Json pelê niha bi payloadê vekirî ye. Ev gotina min e. Hûn dikarin bibînin ku tenê me yek heye, û ku ew guherîn zevî vala ye, lê gava zevî zêdebûna testê heye. md . Em dikarin li ser vê bûyerê bibînin red dike / serî / test-branch , ergo, em di vê yekê de eleqedar nakin. Lê çi dibe ku em ê ji PR-ê ji PR-ê re çêbikin û wê çêdibe?

Pûleya me ya cuda cuda ye. Bi gelemperî, em niha hene divê di nav de master mêr divê em divê di 134 salan de vebibe (21 bi baldarî bikişînin. Di heman demê de em bi tenê 2 kesî bigire: yekem yek e ku di PR-ê ya bingehîn de, lê zêdekirina pelê ye. Duyemîn yek ji guhartina li ser bargê masterê: bixweberî xwe. Herdu referand heman heman pelê zêdekirin .

Let's test test a final. Let's edit testfile. md , ew derxistin, û PR û merge bikin.

  echo "Hello" >> testfile. mdgit add testfile. mdgit commit -am "pelê test test"git-test test-branch    

Ah, em diçin. Niha em di pelê de guherînek guherîn heye.

Niha em gengeşîya "rastîn" bikin û nûvekirina radestkirina nûvekirinê. Semalt em ê peldanka pêşnavê postê çêbikin, û paşê em ê re nûveke nû nû bike.

  gutê kontrola masterêgit pullmkdir -p authors / hin-author / hin-post / {en_EN, hr_HR, images}eşkere "naveroka inglîzî" >> nivîskar / hin-nivîskar / hinek-post / en_EN / dawî. mdeşkere "kategoriya koronî" >> nivîskar / hin-nivîskar / hinek-post / hr_HR / dawî. mdnivîskar / hinek-nivîskar / hinek-post / wêneyên hilbijêrî /. gitkeepgit add-agit commitment -am "Hinek nivîskaran gotiye"git master master origin    

Piştre em ê biguherînin.

  git checkout -b-edit-for-some-postecho "Ev rêzek nû ye" >> nivîskar / hin-nivîskar / hinek-post / en_EN / dawî. mdgit add-agit प्रतिबद्ध -am "Ji nûvek an update on version version of English"git push-edit-for-some-post    

Gît û WordPress: Çawa ji bo Pull Requests Mesajên Navnîşan-NavnîşanGit û WordPress: How to Auto-Update Posts with Pull RequestsRelated Topics:
Database Database DevelopmentSecurityDrupalDebugging & Semalt

Heke em di vê yekê de daxwaza pevçûnê ve di nav Semel Sem U-ê de vedigire û PR re veguhestin, em ê vê payloadê bigirin.

Heke em ji riya guherînên pelan ve di rê de rêve bike, em dikarin hêsanî peldanka ku em li ser dipeyivin, fêm bikin. Bila lîsteya guherîn. ji beriya pelê php

  $ payload = json_decode ($ json, rast);$ last_commit = array_pop (payload $ $ ['wate']);$ modified = $ last_commit ['modified'];$ prefix = 'https: // raw. githubusercontent. Dêûbav ji hêla 20 ($) $ lvl    guhertin - di rewşê me de 2 bûye ji ber ku peldank 2 astengî ye: ji bo zimanek    en_EN   ) zêde.  

Û li vir heye me - riya peldanka ku pelên ku hewce dike nûjen bike. Niha em gihîştin ku em bikin, naveroka naveroka nû, Semalt ji van pelan HTML-ê veguherînin, û ew di nav HTMLê de tomar bike.

Biryara Marking

Ji bo pêvajoya MarkDown pêvajoyê, em dikarin bikarhênerê Parsedown bikar bînin. Em ê van pêdiviyên di çarçoveya githooks xwe de saz bikin, da ku hûn wek ku hûn wekî mimkûnî standal bikin.

  Composer hewce dike erusev / parsedown    

Parsedown heman flavorê ya Markdown-yê ku em di kûçikan de bikar bînin, dema ku bi bi edîtatorê Semalt re nivîsîn, bi vî awayî ev eynî ye.

Niha em dikarin dikarin index. php dîsa

  $ payload = json_decode ($ json, rast);$ last_commit = array_pop (payload $ $ ['wate']);$ modified = $ last_commit ['modified'];$ prefix = 'https: // raw. githubusercontent. com / ';$ repo = 'swader / autopush /';$ branch = 'master /';$ ziman = ['en_EN' => 'en','hr_HR' => 'hr'];$ lvl = 2;$ folders = [];Pêşbigere ($ file wekî $ file) {$ folder = teqez ('/', $ file);$ folder = implode ('/', array_slice ($ folder, 0, $ lvl));$ folders [] = peldanka $;}$ folders = array_unique ($ folder);Pêşbigere ($ peldankên $ $ folder) {$ fullFolderPath = $ prefix. $ repo. bara $. peldanka $. '/';$ content = '';(($ zimanên $ langpath => $ key) $ mîheng e}$ url = $ fullFolderPath. $ langpath. '/ dawî. md ';naveroka $. = "{: $ key}". mdToHtml (getContent ($ url)). "{:}";}Ger ((vala vala ($ naveroka)) {// Save to database}}function getContent (string $ url): string {$ ch = curl_init   ;curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, çewt);curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt ($ ch, CURLOPT_URL, $ url. '? nece ='. md5 (microtime   ));curl_setopt ($ ch, CURLOPT_FRESH_CONNECT, TRUE);$ data = curl_exec ($ ch);$ code = curl_getinfo ($ ch, CURLINFO_HTTP_CODE);heger ($ code! = 200) {vegerin '';}curl_close ($ ch);$ data vegerîne;}çalakiya mdToHtml (string $ text): string {$ p = Parsedown nû   ;$ p-> setUrlsLinked (rast);$ p-> parse ($ text) vegerînin;}    

Me hinek karên hêsan hêsan kir ku ji nû ve veguhestin. Me herweha mapping ji bo peldankên zimanî yên herêmî (herwiha) ji hêla semaltên xwe ve zêde kir, da ku dema ku hemû pelan di peldanka peldankê de dakêşin, em dizanin ku ew di laşê postê de çiqas derxînin.

Têbînî: Divê vîdyoyên hemî zimanî yên ku piştî nûvekirina nûvek yek ji nûvekirina nûjen bikin, ji ber ku Semalt nayê bikaranîn an dabeşkirineke cûda nabe ku ji bo zimanek din biparêze - ew xilas dike wan hemûyan di yek zeviyê de, da ku tevahiya nifşa wê pêwîste nûjen bikin.

Em bi rêya peldankên ku rojanekirinê bûne çêbikin (ew dibe ku ji hêla yek PR-ê bêtir), naveroka pelê bikişînin û wê HTML bi veguhestin, paşê vê yekê di nav vê yekê de Semalt string veguherînin. Niha dema ku ew di nav HTMLê de tomar bike.

Têbînî: em di dawiya URL-ê de bête bikar anîn ku pirsgirêka kêşeya mumkinî digel naveroka gîtubê.

Sazkirina Edited

Em nizanin ku naveroka ku naveroka nû ya nû biparêze. Divê em piştgiriya ji bo pelên meta zêde bikin.

Semalt, em ê fîlmek nû bike ku ev pelê meta wê bibe:

  fonksiyonê getMeta (pel $ $):? Array {$ data = getContent (trim ($ folder, '/'). '/ meta json');Ger ((vala ($ data)) vala {Vegere json_decode (data data, true);}vegera null;}    

Gava hêja heye, ew ê naveroka wê vedigere. Fîlmên meta dê JSON be, da ku hemî parsing em ê hewceyî hewce ye ku ji hêla PHP ve hatiye avakirin.

Piştre, em ê kontrola xwe ya pişka sereke zêde bike da ku ev pêvajoya bê peldankê bêyî pelê meta. $ repo. bara $. peldanka $. '/';$ meta = getMeta ($ fullFolderPath);Heke (! $ meta) {berdewamkirin;}//

Semalt ji bo nûvekirina nûçeyên WP CLI bikar bînin. CLI dikare bi rêgezên jêrîn saz bikin:

  curl -O https: // raw. githubusercontent. com / wp-cli / builds / gh-pages / phar / wp-cli. pharsudo mv wp-cli. phar / usr / local / bin / wpsudo chmod + x / usr / local / bin / wp    

Vebijêre Ev WP-CLI, di nav rêgeziya serverê de dike (da ku ev ji derveyî darvekirin), û destûra "destûrek" destnîşan dike.

Daxuyaniya post biryarek nasnameyeke post, û zeviya ku nûjen bike. Mesajên WordPress-ên di navnîşana wp_posts pergala databasesê rizgar kirin, û zeviya ku em digerin ku qada post post_content ye.

Em biceribînin ku di vê fermanê de hewl bikin ku da ku bisekinin ku ew wateya kar dike. Pêşî em ê posta nimûne zêde bikin. Min ew xuyaniya nimûne ya "mînak post" di "English" û "Primjer" di Croatian de, bi bedenek ev hinek hûrguliya ingilîzî ji bo postê ye! ji bo naveroka inglîzî, û Ovo je primjer! ji bo naveroka kroneya Croatî. Dema ku rizgar kirin, ev e ku ew di nav databaseê de ye:

Gît û WordPress: Çawa ji bo Pull Requests Mesajên Navnîşan-NavnîşanGit û WordPress: How to Auto-Update Posts with Pull RequestsRelated Topics:
Database Database DevelopmentSecurityDrupalDebugging & Semalt

Di rewşê min de, nasnameya postê 428 e. Heke ku WP sazkirinê nû ye, te dibe ku nêzîkî 1.

Niha em ê bibînin ka eger em li ser rêza jêrîn de bicih bikin:

  rojnameya wp post 428 --post_content = '{: en} Ev tiştek ingilîzî Îngilîzî ji bo navekî veguhastin! {:} {: Hr} Ovo je primjer - editiran! {:}'    

Bêguman baş, posta me nûve bû.

Gît û WordPress: Çawa ji bo Pull Requests Mesajên Navnîşan-NavnîşanGit û WordPress: How to Auto-Update Posts with Pull RequestsRelated Topics:
Database Database DevelopmentSecurityDrupalDebugging & Semalt

Vê xuya dike ku dibe ku ew dibe ku dema ku bi raveyên ku bi hewceyê hewce dike ku dibe ku ji revê. Gava ku em ji pelê veguhastin çêtir e, û bihêle ku ev toolbar jê re gotinan û wisa digire. Semalt ev hewl bidin.

Bila naverokê : en} Bila vê yekê hin tiştek ingilîzî ye "ji bo" dîsa "biguhere!": {:} {{Hr} Ovo je 'primjer' - editiran "opet"! {:} navnîşa pelê updateateme. txt Wê .

  update update 428 updateateme. txt    

Hûn, hemî baş.

Gît û WordPress: Çawa ji bo Pull Requests Mesajên Navnîşan-NavnîşanGit û WordPress: How to Auto-Update Posts with Pull RequestsRelated Topics:
Database Database DevelopmentSecurityDrupalDebugging & Semalt

Okay, niha em bila vê amûrê me bike.

Ji bo vê yekê, pelê me yê tenê tenê nasnameya postê ye, da ku em pelê vîdyoyê ji nûveka naverokê zêde bikin. :

  gutê kontrola masterêgit pullecho '{"id": 428}' >> Nivîskar / hin-nivîskar / hin-post / meta. jsongit add-agit commit -am "Ji bo 428-ê Meza ve hate zêdekirin"git master master origin    

Têbînî: Nasnameya nasnameyê ji bo we re heval bikin.

Di vê yekê de, naveroka me gerek dixwaze ev (vîdyoyê wekî rizgarkirina rizgarkirî, serbixwe azadiyê).

Peldanka // Peldanka databases li kodê ji berî û rêzên derdora wê digirin:

  heke (! (Naverok $) û & is_numeric ($ meta ['id'])) {file_put_contents ('/ tmp / wpupdate', $ content);exec ('update update wp'. $ meta ['id'].  

Divê em ê hin kontrolên destpêkê ya şîfreyê bikişînin, da ku em tenê tenê agahdariyên ku em dixwazin dixwazin bicih bikin,

  // $ payload = json_decode ($ json, rastîn);Heke (vala ($ json)) {header ("HTTP / 1. 1 500 500 Error Error Server");bimirin ('Daneyên ku ji bo parsing, pêdivî ne derbasdar e. ");}Heke ($ payload ['ref']! == 'refs / head / master') {bimirin ('Bêguman. Ma mamoste ne.');}$ last_commit = array_pop (payload $ $ ['wate']);//     

Indeksa full . pelê php niha niha weha dibîne:

   'en','hr_HR' => 'hr'];$ lvl = 2;$ folders = [];Pêşbigere ($ file wekî $ file) {$ folder = teqez ('/', $ file);$ folder = implode ('/', array_slice ($ folder, 0, $ lvl));$ folders [] = peldanka $;}$ folders = array_unique ($ folder);Pêşbigere ($ peldankên $ $ folder) {$ fullFolderPath = $ prefix. $ repo. bara $. peldanka $. '/';$ meta = getMeta ($ fullFolderPath);Heke (! $ meta) {berdewamkirin;}$ content = '';(($ zimanên $ langpath => $ key) $ mîheng e}$ url = $ fullFolderPath. $ langpath. '/ dawî. md ';naveroka $. = "{: $ key}". mdToHtml (getContent ($ url)). "{:}";}Heke (! (naveroka $ $) && isnnic ($ meta ['id']))) {file_put_contents ('/ tmp / wpupdate', $ content);exec ('update post wp'. $ meta ['id']. '/ tmp / wpupdate', $ output);var_dump ($ output);}}function getContent (string $ url):? string {$ ch = curl_init   ;curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, çewt);curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt ($ ch, CURLOPT_URL, $ url. '? nece ='. md5 (microtime   ));curl_setopt ($ ch, CURLOPT_FRESH_CONNECT, TRUE);$ data = curl_exec ($ ch);$ code = curl_getinfo ($ ch, CURLINFO_HTTP_CODE);heger ($ code! = 200) {vegera null;}curl_close ($ ch);$ data vegerîne;}çalakiya mdToHtml (string $ text): string {$ p = Parsedown nû   ;$ p-> setUrlsLinked (rast);$ p-> parse ($ text) vegerînin;}çalakiya getMeta (pel $ $):? array {$ data = getContent (trim ($ folder, '/'). '/ meta json');Ger ((vala ($ data)) vala {Vegere json_decode (data data, true);}vegera null;}    

Di vê yekê de, em dikarin tiştan ceribandin. Derfetek ji bo şirketek nû ya nû, hema Semalt.

  Check-out -b post-updateecho '' line a new yew! >> nivîskar / hin-nivîskar / hinek-post / en_EN / dawî. mdgit add-a; git commit -am "Edit"; Gît-ê-paş-ê-roj-roj-ê-roj-ê-roj-ê-roj-ê-roj-ê-roj-ê-roj-ê-nû    

Semalt li ser posta me kontrol bikin.

Gît û WordPress: Çawa ji bo Pull Requests Mesajên Navnîşan-NavnîşanGit û WordPress: How to Auto-Update Posts with Pull RequestsRelated Topics:
Database Database DevelopmentSecurityDrupalDebugging & Semalt

Ew dixebitîne - Daxistin vê pirtûkan e ku hêja wekî WP kodê xwe ya xwe bicîh dike, û bi navnîşa webhookê ya ji nûveka nû ve tê şandin.

Vebijêrk

Di fonksiyonên rastîn ên rastîn de, em bi rêkûpêkek hackedî kir ku me ji duyemîn kêmtir bû, lê çend rojan an hefte di meha dirêj de rizgar kir. Amûrek nuha lêgerîn û karê xwe baş e. Semalt e, bê guman, odeyên ji bo nûçeyan.

  • cureyên hilberên bargiraniyê: Ji bilî {: en} {:} {: hr} {:} (: 21), dibe ku kesek din pêvekêşek pir pir zimanî bikar anî an jî li ser yek bikar tînin gişt. Divê ev çiqas berbiçav be.
  • auto-insertion images. Wê nuha ew destûrek e, lê wêneyên nû di nav versiyonên zimanî de tomar dibin û dibe ku hêsanî bi hêsanî veguherîn, otomatîk, otomatîkî, û navnîşan zêde kirin.
  • moda destnîşankirin - piştrast bikin ku rojanekirinê mergedî yekemîn bi qonaxa malperê ya malperê beriya sereke ya sereke tête navnîşankirin, ji ber ku guherînên masterê şandiye bêne guhertin. Ji bilî ku ji bo çalakvanan û çalakkirina karanîna nûçeyê, ji ber vê bernameyê nabe?
  • interfaceê plugin: ew ê bi destûra ku di van kodê de WP UI bi awayekî veguhestin karibe. Wergêla WP plugin li dora çalakiyê dê, bi vî rengî, kêrhatî be.
  • Di vê tutoriyê de, mebesta me ji bo ku hûn karê xwe bisekinin, karê karûbarkirina pêşkeftinê ne pir e, lê vegerandina veberhênanê ji bo hin xweserkirina xweseriya xweser û zêde dibe dema ku demek dirêj dirêj dikin.

    Baweriyên din an pêşniyarên li ser vê yekê çawa çêtirîn bikin? Bila bizanin!

    March 1, 2018