Back to Question Center
0

Git و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای محرمانه            Git و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای درخواستی موضوعهای مرتبط: DatabaseDevelopment EnvironmentSecurityDrupalDebugging & ؛ Semalt

1 answers:
Git and WordPress: چگونه به صورت خودکار به روز رسانی پست با درخواست استوارد

در Bitfalls. com، ما هم اکنون از وردپرس استفاده میکنیم و از همان رویکرد نظرسنجی برای محتوا استفاده میکنیم همانطور که در Semalt انجام میدهیم.

ما تصمیم گرفتیم یک ابزار را ایجاد کنیم که به طور خودکار مطالب را از درخواست های تلاقی ادغام شده به مقالات بیاندازد، به ما امکان می دهد که خطاها و پست ها را از Github به روزرسانی کنیم و تغییراتی را که در سایت زنده مشاهده شده را ببینیم - light blue hat wedding. این آموزش شما را از طریق ایجاد این ابزار پیاده می کند، بنابراین شما می توانید آن را برای سایت Semalt خود بکار ببرید یا نسخه خود را بسازید.

طرح

قسمت اول شناسایی مشکل و وضعیت اطراف آن است.

  • از WPGlobus برای پشتیبانی چند زبانه استفاده می کنیم که به این معنی است که محتوای مانند این ذخیره می شود: {: en} محتوای انگلیسی {:} {: hr} محتوای کرواتی {:} .
  • نویسندگان PR ها را از طریق Github عرضه می کنند، PR ها با هم بررسی می شوند و ادغام می شوند و سپس (در حال حاضر) به طور دستی وارد شده به WP Posts UI از طریق مرورگر.
  • هر پست یک پوشه مشابه دارد: author_folder / post_folder / language / final. MD
  • این است آهسته و خطا مستعد است، و گاهی اوقات اشتباهات لغزش توسط. این نیز باعث می شود پست های خسته کننده.

راه حل زیر است:

  • یک پردازنده قلاب را اضافه کنید که فشار را به شاخه اصلی (i.e. ادغام از PRs)
  • پردازنده باید یک متا پرونده را در ترسیم دنبال کند که حاوی اطلاعاتی در مورد کجا برای ذخیره محتوای به روز شده باشد
  • پردازنده به طور خودکار محتوای MD را به HTML تبدیل می کند، زبان ها را در قالب WPGlobus ادغام می کند و آنها را در پایگاه داده ذخیره می کند

بوت استرپینگ

اگر می خواهید به دنبال (به شدت توصیه می شود) دنبال کنید، لطفا یک محیط ماشین مجازی خوب بوت کنید، جدیدترین نسخه وردپرس را نصب کنید و افزونه WPGlobus را اضافه کنید. همچنین شما می توانید جعبه وردپرس آماده مانند VVV را استفاده کنید. علاوه بر این، اطمینان حاصل کنید که محیط زیست شما نصب شده است - ما از آن برای راه انداز کردن حلقه های Semalt برای ماشین های محلی استفاده می کنیم، بنابراین می توانیم به جای نیاز به استقرار، محلی را آزمایش کنیم.

قلاب

برای این آزمایش، یک مخزن جدید ایجاد کنیم. Semalt تماس autopush معدن.

در تنظیمات این مخزن، ما باید یک قلاب جدید اضافه کنیم. از آنجا که ما در مورد یک URL موقت Semalt صحبت می کنیم، ابتدا آن را بالا ببریم. در مورد من، ورود به زیر در میزبان می کند فریب:

  ngrok http خانه. برنامه: 80    

من لینک http: // 03672a64 داده شد. نرگک io ، بنابراین این چیزی است که به webhook می رود، با یک پسوند دلخواه مانند githook . ما فقط نیاز به رویدادهای فوری داریم نوع داده json پاک تر است، بنابراین به عنوان یک ترجیح انتخاب می شود و تنظیمات وب سایت نهایی به نظر می رسد چیزی شبیه به این است:

Git و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای محرمانهGit و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای درخواستی موضوعهای مرتبط:
DatabaseDevelopment EnvironmentSecurityDrupalDebugging و Semalt

Semalt این را آزمایش کنید.

  git clone https: // github. com / swader / autopushAutopush سی دیREADME را لمس کن MDecho "این فایل README است" >> README. MDgit اضافه کردن -Agit commit -am "ما برای نخستین بار فشار می آوریم"git push اصلی استاد    

صفحه ورودی ngrok باید چیزی شبیه به این داشته باشد:

  POST / githook / 404 یافت نشد    

این خوب است. ما / githook نقطه پایان هنوز ساخته نشده است.

پردازنده Webhooks

این داده های جدید را به وردپرس با منطق دلخواه خواهیم خواند. با توجه به ماهیت spaghetti-code از خود WP، ساده تر از آن است که آن را به طور کامل با یک برنامه کوچک سفارشی کنار بگذارید. php فایل داخل آن. این باعث می شود که مسیر / githook / قابل دسترسی باشد و قلاب دیگر 404 بازگشت نخواهد داشت، اما 200 OK.

طبق اسناد، بارگیری مجدد مرتبه را با یک اصلاح فیلد در هر تعهد انجام خواهد داد. از آنجا که ما فقط به دنبال به روز رسانی پست ها نیستیم، آنها را برنامه ریزی یا حذف نمیکنیم - این مراحل هنوز دستی هستند، برای ایمنی - ما تنها به آن توجه می کنیم. بیایید ببینیم آیا می توانیم آن را در یک فشار تست بگیریم؟

اولا، داده های درخواست ما را به یک فایل متنی برای اهداف اشکالزدایی ذخیره می کنیم. ما می توانیم با تغییر githook / index ما را انجام دهیم. php file:

  <؟ phpfile_put_contents ('تست. txt'، file_get_contents ('php: // ورودی'))؛    

سپس یک شاخه جدید ایجاد می کنیم، یک فایل اضافه می کنیم و آن را به صورت آنلاین فشار می دهیم.

  git check-b test-branchتست فایل لمس کنید MDgit add testfile MDgit commit -am "فایل تست اضافه شده"git push origin test-branch    

به اندازه کافی ما آزمون. فایل JSON اکنون با بارنامه پر شده است. این پولی است که من دریافت کردم. شما می توانید ببینید که ما فقط یک مرتبه داریم و فیلد commit اصلاح شده خالی است، در حالی که فیلد اضافه شده دارای testfile است. MD . ما همچنین می توانیم این را ببینیم refs / heads / test-branch ، ما به آن علاقه ای نداریم. اما چه اتفاقی می افتد اگر ما PR را از این شاخه بیرون کنیم و آن را ادغام کنیم؟

میزان حمل و نقل ما متفاوت است. مهمتر از همه، ما اکنون refs / heads / master را به عنوان فیلد ref داریم، به این معنی که در شاخه master رخ داده است و ما باید به آن توجه کن. ما نیز 2 را به جای فقط یک مرتکب می کنیم: اولی همان است که در اصل PR، اضافه کردن فایل است. دوم، مربوط به تغییر در شاخه اصلی است: خود ادغام. هر دو مرجع همان اضافه شده فایل.

بیایید یک آزمایش نهایی انجام دهیم. بگذارید ویرایش testfile. MD ، آن را فشار دهید، و PR و ادغام را انجام دهید.

  echo "سلام" >> testfile. MDgit add testfile MDgit commit -am "فایل تست اضافه شده"git push origin test-branch    

آه، ما برویم در حال حاضر فایل اصلاح شده در بارنامه داریم.

حالا یک سناریوی "واقعی" بسازیم و یک ارسال به روز رسانی را شبیه سازی کنیم. Semalt ما یک پوشه پیش فرض پست ایجاد می کنیم، و سپس PR را به آن اضافه خواهیم کرد.

  استاد پرداخت گیتگیت کشیدنmkdir -p نویسندگان / برخی از نویسندگان / برخی از پست / / {en_EN، hr_HR، تصاویر}اکو "محتوای انگلیسی" >> نویسندگان / برخی از نویسنده / برخی از پست / en_EN / نهایی. MDاکو "محتوای کرواسی" >> نویسندگان / برخی از نویسنده / برخی از پست / hr_HR / فینال. MDنویسندگان لمسی / برخی از نویسنده / برخی از پست / تصاویر /. gitkeepgit اضافه کردن -Agit commit -am "اضافه شده بعضی از نویسنده"git push اصلی استاد    

سپس ویرایش را انجام می دهیم.

  git check -b ویرایش برای برخی از پستecho "این یک خط جدید است" >> نویسندگان / برخی از نویسنده / برخی از پست / en_EN / نهایی. MDgit اضافه کردن -Agit commit -am "افزودن یک بروزرسانی در نسخه انگلیسی این پست"git push origin ویرایش برای برخی از پست    

Git و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای محرمانهGit و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای درخواستی موضوعهای مرتبط:
DatabaseDevelopment EnvironmentSecurityDrupalDebugging و Semalt

اگر ما این را به یک درخواست پیوسته در رابط وب وب Semalt تبدیل کنیم و PR را ادغام کنیم، این مزیت را دریافت می کنیم.

اگر مسیر را از فایل های اصلاح شده در loadload دنبال کنیم، می توانیم به راحتی پوشه ای را که در موردش حرف می زنیم تشخیص دهیم. بگذارید تغییر شاخص. php فایل از قبل.

  $ payload = json_decode ($ json، true)؛$ last_commit = array_pop ($ payload ['commits'])؛$ modified = $ last_commit ['modified']؛$ prefix = 'https: // raw. githubusercontent. پدر و مادر    متغیر $ lvl    دیکته شده اند - در مورد ما این 2 است زیرا پوشه 2 سطح است: یک زبان اضافی (   en_EN   ).  

و ما آن را داریم - مسیر پوشه ای که پرونده هایی را که باید به روز می شود نگه دارد. در حال حاضر همه ما باید انجام دهیم محتویات را برداریم، Semalt از آن فایل ها را به HTML تبدیل کنیم و آن را در پایگاه داده ذخیره کنیم.

معادله پردازش

برای پردازش MarkDown، می توانیم از Packed Parsedown استفاده کنیم. ما این وابستگی ها را در پوشه githooks خود نصب می کنیم تا برنامه را به عنوان مستقل به عنوان امکان پذیر سازیم.

  آهنگساز نیاز به erusev / parsedown    

Parsedown عطر و طعم عطر و طعم Markdown ما در Bitfalls در هنگام نوشتن با ویرایشگر Semtal استفاده می شود، بنابراین یک بازی کامل است.

اکنون می توانیم شاخص را تغییر دهیم. پی اچ پی دوباره.

  $ payload = json_decode ($ json، true)؛$ last_commit = array_pop ($ payload ['commits'])؛$ modified = $ last_commit ['modified']؛$ prefix = 'https: // raw. githubusercontent com / '؛$ repo = 'swader / autopush /'؛$ branch = 'master /'؛$ languages ​​= ['en_EN' => 'en''hr_HR' => 'hr']$ lvl = 2؛$ folders = []؛foreach ($ modified as $ file) {$ folder = explode ('/'، $ file)؛$ folder = implode ('/'، array_slice ($ folder، 0، - $ lvl))؛$ پوشه ها [] = $ پوشه؛}$ folders = array_unique ($ folders)؛foreach (پوشه های $ به عنوان پوشه $) {$ prefix $ fullFolderPath = $. $ repo شعبه $ پوشه $ '/'؛$ content = ''؛foreach ($ زبان به عنوان $ langpath => $ key) {$ url = $ fullFolderPath $ langpath '/ نهایی MD '؛محتوای $ = "{: $ key}" mdToHtml (getContent ($ url)). "{:}"؛}اگر ((خالی ($ محتوای)) {// ذخیره به پایگاه داده}}function getContent (string $ url): string {$ ch = curl_init   ؛curl_setopt ($ ch، CURLOPT_SSL_VERIFYPEER، false)؛curl_setopt ($ ch، CURLOPT_RETURNTRANSFER، 1)؛curl_setopt ($ ch، CURLOPT_URL، $ url. 'nonce ='. md5 (microtime   ))؛curl_setopt ($ ch، CURLOPT_FRESH_CONNECT، TRUE)؛$ data = curl_exec ($ ch)؛$ code = curl_getinfo ($ ch، CURLINFO_HTTP_CODE)؛اگر ($ code! = 200) {برگشت ''؛}curl_close ($ ch)؛بازگشت به $ data}تابع mdToHtml (string $ text): string {$ p = جدید Parsedown   ؛$ p-> setUrlsLinked (درست)؛بازگشت $ p-> تجزیه ($ متن)؛}    

برای جلوگیری از تکرار، ما برخی از عملکردهای ساده را انجام دادیم. ما همچنین نقشه کشیدن پوشه های زبان (محلی) را به کلید های Semalt اضافه کردیم، به طوری که وقتی از طریق تمام فایل ها در یک پوشه تکرار می کنیم، می دانیم که چگونه آنها را در قسمت پست قرار دهیم.

توجه: ما باید تمام نسخه های یک پست از یک پست را در هنگام انجام یک به روز رسانی به تنها یک بپردازیم، زیرا Semalt از یک فیلد اضافی یا ردیف پایگاه داده دیگری استفاده نمی کند تا یک زبان دیگر را ذخیره کند - آن را موجب صرفه جویی همه آنها را در یک میدان، بنابراین کل ارزش آن فیلد باید به روز شود.

ما از طریق پوشه هایی که به روزرسانی می شوند تکرار می شویم (ممکن است بیش از یک در PR وجود داشته باشد)، محتویات فایل را بردارید و آن را به HTML تبدیل کنید، سپس همه این ها را به یک رشته Semalt ذخیره کنید. اکنون وقت آن است که این را در پایگاه داده ذخیره کنید.

توجه: ما از یک nonce در انتهای URL استفاده کردیم تا یک مشکل احتمالی احتمالی با محتوای github خام را نامعتبر کنیم.

ذخیره ویرایش مطلب

ما نمیدانیم کجا محتوای جدید را ذخیره کنیم. ما باید برای متا فایل ها پشتیبانی کنیم.

Semalt، ما یک تابع جدید که این متا پرونده را دریافت می کند اضافه می کنیم:

  function getMeta (string $ folder): array {$ data = getContent (trim ($ folder، '/'). '/ meta json')؛اگر ((خالی ($ داده)) {بازگشت json_decode ($ data، true)؛}null برگشت}    

ساده، اگر آن وجود داشته باشد، محتویات آن را باز می گرداند. فایل های متا JSON خواهند بود، بنابراین تمام تجزیه هایی که ما هرگز نیاز نداریم، قبلا در PHP ساخته شده است.

سپس، ما یک چک را به حلقه اصلی ما اضافه خواهیم کرد تا پروسه هر پرونده بدون یک متا پرونده را از بین ببرد. $ repo شعبه $ پوشه $ '/'؛$ meta = getMeta ($ fullFolderPath)؛اگر (! $ meta) {ادامه هید؛}// .

Semalt از WP CLI برای به روز رسانی استفاده کنید. CLI را می توان با دستورات زیر نصب کرد:

  curl -O https: // خام. githubusercontent com / wp-cli / builds / gh-pages / phar / wp-cli. داروخانهsudo mv wp-cli. phar / usr / local / bin / wpsudo chmod + x / usr / local / bin / wp    

این ابزار WP-CLI را بارگیری می کند، آن را در مسیر سرور قرار می دهد (بنابراین می توان آن را از هر جا اجرا کرد)، و مجوز "اجرایی" را به آن اضافه می کند.

فرمان ارسال به روز رسانی نیاز به یک شناسه پست و زمینه برای به روز رسانی. پست های وردپرس در جدول پایگاه داده wp_posts ذخیره می شوند و زمینه ما برای به روز رسانی post_content فیلد است.

بیایید این را در خط فرمان امتحان کنیم تا مطمئن شویم که این کار به همان صورت در نظر گرفته شده است. ابتدا یک پست نمونه اضافه کنید من این عنوان مثال "پست مثال" را به زبان انگلیسی و "Primjer" در کرواسی به همراه آوردم این یک محتوای انگلیسی برای یک پست است! برای محتوای انگلیسی، و Ovo je primjer! برای محتوای کرواسی. وقتی ذخیره شد، این همان چیزی است که در پایگاه داده به نظر می رسد:

Git و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای محرمانهGit و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای درخواستی موضوعهای مرتبط:
DatabaseDevelopment EnvironmentSecurityDrupalDebugging و Semalt

در مورد من، شناسه پست 428 است. اگر نصب WP شما تازه باشد احتمالا شما به 1 نزدیک تر می شوید.

حالا ببینیم چه اتفاقی می افتد اگر خط زیر را اجرا کنیم:

  wp post update 428 --post_content = '{: en} این یک محتوای انگلیسی برای ویرایش پست است! {:} {: hr} Ovo je primjer - editiran! {:}'    

به اندازه کافی، پست ما به روز شد.

Git و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای محرمانهGit و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای درخواستی موضوعهای مرتبط:
DatabaseDevelopment EnvironmentSecurityDrupalDebugging و Semalt

این به نظر می رسد که ممکن است زمانی که با نقل قول هایی که باید فرار کنند، مشکل ساز باشد. بهتر است اگر ما از فایل به روزرسانی کنیم، و این ابزار را به نقل از و غیره بسپاریم. سمیرت آن را امتحان کنید

: محتویات را قرار دهید: en} این "محتوای" انگلیسی است که برای "دوباره" ویرایش شده است! {:} {: hr} Ovo je 'primjer - editiran "opet"! {:} به یک فایل به نام updateme. txt . سپس .

  wp post update 428 updateme. TXT    

بله، همه چیز خوب است.

Git و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای محرمانهGit و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای درخواستی موضوعهای مرتبط:
DatabaseDevelopment EnvironmentSecurityDrupalDebugging و Semalt

حالا، بگذارید این را به ابزار ما اضافه کنیم.

در حال حاضر، متا پرونده ما فقط شناسه پست را خواهد داشت، بنابراین اجازه دهید یک پرونده را برای بازپرداخت محتوا اضافه کنیم. :

  استاد پرداخت گیتگیت کشیدنecho '{"id": 428}' >> نویسندگان / برخی از نویسنده / برخی از پست / متا. جسونgit اضافه کردن -Agit commit -am "اضافه شدن متا پرونده برای پست 428"git push اصلی استاد    

توجه: به روز رسانی شناسه برای مطابقت با شما.

در این مرحله، بازپرداخت محتوای ما باید مانند این باشد (نسخه به عنوان نسخه آزمایشی ذخیره شده است، احساس رایگان به کلون).

را جایگزین کنید (/) در خط کد (قبل از خطوط اطراف آن):

  if (empty ($ content) && is_numeric ($ meta ['id'])) {file_put_contents ('/ tmp / wpupdate'، $ محتوای)؛exec ('wp update post'. $ meta ['id'].  

همچنین باید ابتدا اسکریپت چندین چک را اضافه کنیم تا اطمینان حاصل کنیم که فقط بهروزهایی را که میخواهیم اجرا کنیم اجرا کنیم:

  / / $ loadload = json_decode ($ json، true)؛اگر (empty ($ json)) {هدر ("HTTP / 1. 1 500 خطای سرور داخلی")؛مرگ ('داده ای برای تجزیه و تحلیل داده نشده است، اعتبار نامعتبر است.')؛}اگر ($ payload ['ref']! == 'refs / heads / master') {مرگ ('نادیده گرفته شود نه استاد.')؛}$ last_commit = array_pop ($ payload ['commits'])؛// .     

شاخص کامل . فایل php اکنون به نظر می رسد:

  <؟ phprequire_once 'vendor / autoload php '؛$ json = file_get_contents ('php: // input')؛file_put_contents ('test json'، $ json)؛$ loadload = json_decode ($ json، true)؛اگر (empty ($ json)) {هدر ("HTTP / 1. 1 500 خطای سرور داخلی")؛مرگ ('داده ای برای تجزیه و تحلیل داده نشده است، اعتبار نامعتبر است.')؛}اگر ($ payload ['ref']! == 'refs / heads / master') {مرگ ('نادیده گرفته شود نه استاد.')؛}$ last_commit = array_pop ($ payload ['commits'])؛$ modified = $ last_commit ['modified']؛$ prefix = 'https: // raw. githubusercontent com / '؛$ repo = 'swader / autopush /'؛$ branch = 'master /'؛$ languages ​​= ['en_EN' => 'en''hr_HR' => 'hr']$ lvl = 2؛$ folders = []؛foreach ($ modified as $ file) {$ folder = explode ('/'، $ file)؛$ folder = implode ('/'، array_slice ($ folder، 0، - $ lvl))؛$ پوشه ها [] = $ پوشه؛}$ folders = array_unique ($ folders)؛foreach (پوشه های $ به عنوان پوشه $) {$ prefix $ fullFolderPath = $. $ repo شعبه $ پوشه $ '/'؛$ meta = getMeta ($ fullFolderPath)؛اگر (! $ meta) {ادامه هید؛}$ content = ''؛foreach ($ زبان به عنوان $ langpath => $ key) {$ url = $ fullFolderPath $ langpath '/ نهایی MD '؛محتوای $ = "{: $ key}" mdToHtml (getContent ($ url)). "{:}"؛}اگر (empty ($ content) && is_numeric ($ meta ['id'])) {file_put_contents ('/ tmp / wpupdate'، $ محتوای)؛exec ('wp post update'. $ meta ['id']. '/ tmp / wpupdate'، $ output)؛var_dump ($ خروجی)؛}}function getContent (string $ url):؟ string {$ ch = curl_init   ؛curl_setopt ($ ch، CURLOPT_SSL_VERIFYPEER، false)؛curl_setopt ($ ch، CURLOPT_RETURNTRANSFER، 1)؛curl_setopt ($ ch، CURLOPT_URL، $ url. 'nonce ='. md5 (microtime   ))؛curl_setopt ($ ch، CURLOPT_FRESH_CONNECT، TRUE)؛$ data = curl_exec ($ ch)؛$ code = curl_getinfo ($ ch، CURLINFO_HTTP_CODE)؛اگر ($ code! = 200) {null برگشت}curl_close ($ ch)؛بازگشت به $ data}تابع mdToHtml (string $ text): string {$ p = جدید Parsedown   ؛$ p-> setUrlsLinked (درست)؛بازگشت $ p-> تجزیه ($ متن)؛}function getMeta (string $ folder):؟ array {$ data = getContent (trim ($ folder، '/'). '/ meta json')؛اگر ((خالی ($ داده)) {بازگشت json_decode ($ data، true)؛}null برگشت}    

در این مرحله ما می توانیم همه چیز را آزمایش کنیم. شانس Semalt برای یک شعبه با نام تجاری جدید نیز وجود دارد.

  git check-b post-updateecho 'افزودن یک خط جدید یی!' >> نویسندگان / برخی از نویسنده / برخی از پست / en_EN / نهایی. MDگیت اضافه -A؛ git commit -am "ویرایش"؛ گیت پیگیری مبنایی پس از به روز رسانی    

Semalt بررسی پست ما خارج.

Git و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای محرمانهGit و وردپرس: نحوه بهروزرسانی خودکار پست با درخواستهای درخواستی موضوعهای مرتبط:
DatabaseDevelopment EnvironmentSecurityDrupalDebugging و Semalt

این کار می کند - استقرار این اسکریپت در حال حاضر ساده است به عنوان راه اندازی کد WP از برنامه خود را و به روز رسانی URL hijacker برای repo در مورد.

نتیجه گیری

در قالب وردپرس واقعی، ابزار ما را هک کردیم که کمتر از یک بعد از ظهر به ما رسید، اما ما در طولانی مدت روزها یا هفته ها را نجات دادیم. ابزار در حال حاضر به کار گرفته شده و به طور مناسب عمل می کند. Semalt، البته، اتاق برای به روز رسانی است.

  • انواع خروجی های سفارشی: به جای ثابت {: en} {:} {: hr} {:} ، شاید یکی دیگر از پلاگین چند زبان مختلف استفاده کند یا از یک همه. این باید به نوعی قابل تنظیم باشد
  • خودکار قرار دادن تصاویر. در حال حاضر این کتابچه راهنمای کاربر است، اما تصاویر در نسخه مجازی در کنار نسخه های زبان ذخیره می شوند و احتمالا می توانند به راحتی وارد، بهینه سازی شده و به پست اضافه شوند.
  • حالت استقرار - اطمینان حاصل کنید که به روز رسانی ادغام شده قبل از رفتن به یکی از اصلی به یک نسخه پیشنهادی از سایت منتقل می شود، بنابراین قبل از فرستادن به استاد، می توان این تغییرات را تأیید کرد. به جای اینکه برای فعال کردن و غیرفعال کردن webhooks، چرا این برنامه قابل برنامه ریزی را انجام ندهید؟
  • یک رابط پلاگین: این امر مفید خواهد بود که قادر به تعریف همه این در UI WP باشد نه کد. بنابراین انتزاع پلاگین WP در اطراف عملکرد، مفید خواهد بود.
  • با استفاده از این آموزش، قصد ما این بود که به شما نشان دهیم که بهینه سازی گردش کار، زمانیکه وقت خود را صرف انجام این کار می کنید، معامله ای بزرگ نیست، و بازده سرمایه گذاری برای به خطر انداختن زمان برای به دست آوردن خودکار و راه اندازی آن می تواند بسیار زیاد باشد هنگام تفکر بلند مدت.

    ایده های دیگر یا نکات در مورد چگونگی بهینه سازی این چیست؟ به ما اطلاع دهید!

    February 28, 2018