Inside the Dev House: Πώς χειριζόμαστε την αυτόματη ανάπτυξη θεμάτων για θέματα LITE και PRO WordPress

Όπως θα φανταζόσασταν, η ανάπτυξη θεμάτων είναι κάτι που κάνουμε αρκετά εδώ στην εταιρεία. Με περίπου 4-5 νέα θεματικά έργα στα έργα ανά πάσα στιγμή και 80 θέματα σε τον κατάλογό μας συνολικά (που σημαίνει ενεργή συντήρηση και περαιτέρω ανάπτυξη αυτών), έχουμε τα χέρια μας αρκετά γεμάτα.


Σε ένα τέτοιο περιβάλλον, η βελτιστοποίηση και ακόμη και η αυτοματοποίηση, όποτε είναι δυνατόν, είναι το κλειδί.

Έτσι, σήμερα, θέλουμε να σας προσκαλέσουμε μέσω της πόρτας του dev house μας στο Θέμα, για να μιλήσουμε και να σας δείξουμε δύο συγκεκριμένα κομμάτια του παζλ ανάπτυξης θεμάτων.

Δεν θα κρύψω ότι αυτό το είδος ανάρτησης είναι ένα πείραμα. Εάν σας αρέσει, θα φροντίσουμε να παρουσιάσουμε περισσότερα πράγματα όπως αυτό στο μέλλον.

Συγκεκριμένα, το θέμα του σήμερα είναι κάτι που μπορεί να ονομαστεί, "αυτόματη ανάπτυξη και αρχιτεκτονική οπτικής παλινδρόμησης για ανάπτυξη θεμάτων WordPress."

Περιμένετε, τι είναι η αυτόματη ανάπτυξη θέματος?

Εάν δεν μιλάτε για προγραμματιστές, τότε αυτό που σημαίνει στα Αγγλικά είναι ότι μπορείτε να αναπτύξετε θέματα για το WordPress, να τα αναπτύξετε σε έναν διακομιστή και, στη συνέχεια, να συγκρίνετε οπτικά τις διαφορές με μια προκαθορισμένη γραμμή βάσης χωρίς να χρειάζεται να κάνετε κάτι χειροκίνητα.

Όλα συμβαίνουν αυτόματα, ή μάλλον, "αυτόματα."

Πως λειτουργεί αυτό?

Αναπτύξαμε δύο υπηρεσίες για τη φροντίδα αυτής της αυτόματης ανάπτυξης θέματος: "Πειρατικό Bootstrap" και "Πειρατής Wraith."

Το πρώτο, Pirate Bootstrap, μπορεί να ενεργοποιηθεί μέσω Webhooks από το GitHub.

Στο Pull Request, αναπτύσσει μια νέα παρουσία WordPress, χρησιμοποιώντας ένα συγκεκριμένο θέμα από ένα σύνολο αποθετηρίου + όλα τα πακέτα και τις ρυθμίσεις βάσης δεδομένων που λαμβάνονται από την προεπιλεγμένη επίδειξη του θέματος στο ThemeIsle.

Ο τελευταίος, Pirate Wraith, κάνει μια δοκιμή οπτικής παλινδρόμησης (επίσης συγκρίνοντας εικόνες από δύο πηγές). Η δοκιμή ελέγχει τη νέα ανάπτυξη του θέματος έναντι της επίδειξης από το ThemeIsle – οπτικά – και στη συνέχεια δημιουργεί μια αναφορά. Με βάση αυτήν την αναφορά, μπορείτε να δείτε γρήγορα αν οι πρόσφατες αλλαγές επηρέασαν την εμφάνιση του θέματος.

Με άλλα λόγια, όποτε εργάζεστε σε ένα θέμα και θέλετε να βεβαιωθείτε ότι οι τελευταίες αλλαγές κώδικα δεν έχουν βλάψει το σχεδιασμό του θέματος, μπορείτε να χρησιμοποιήσετε το Pirate Wraith για να χειριστείτε την εργασία στο αυτόματο πιλότο.

Ας εξηγήσουμε κάθε υπηρεσία με περισσότερες λεπτομέρειες:

Pirate Bootstrap – αναπτύσσει μια νέα παρουσία του WordPress χρησιμοποιώντας ένα καθορισμένο θέμα

Το Pirate Bootstrap φιλοξενείται στο forks.themeisle.com

Το Pirate Bootstrap είναι χτισμένο στην κορυφή WP-CLI και έχει μεθόδους δημιουργίας ολοκληρωμένων αναπτύξεων WordPress βασίζεται σε πακέτα θεμάτων και εξαρτήσεις ThemeIsle.

Τα στοιχεία:

GitHub Webhooks

Τα Webhooks χρησιμοποιούνται για να καλέσουν το Pirate Bootstrap’s API στο (άνοιγμα ή συγχρονισμό) Τραβήξτε αιτήματα στέλνοντας ένα ωφέλιμο φορτίο JSON στη διεύθυνση http://forks.themeisle.com

Αυτό ξεκινά τη ροή εργασίας ανάπτυξης στο forks.themeisle.com. Όπως:

Αυτόματη ανάπτυξη θεμάτων για θέματα LITE και PRO WordPress

Παράδειγμα ωφέλιμου φορτίου GitHub Pull Request:

{
"δράση": "άνοιξε",
"αριθμός": 1,
"pull_request": {

"κεφάλι": {
"επιγραφή": "preda-bogdan: παραγωγή",
"αναφ": "παραγωγή",
"σα": "****",

"ρεπό": {
"ταυτότητα": 82166596,
"όνομα": "zerif-lite",
"πλήρες όνομα": "preda-bogdan / zerif-lite",
"ιδιοκτήτης": {
"Σύνδεση": "preda-bogdan",

},
"ιδιωτικός": λάθος,

"git_url": "git: //github.com/preda-bogdan/zerif-lite.git",
"ssh_url": "[email protected]: preda-bogdan / zerif-lite.git",
"clone_url": "https://github.com/preda-bogdan/zerif-lite.git",
"svn_url": "https://github.com/preda-bogdan/zerif-lite",

}
},

}
}

  • Χρησιμοποιούμε το "σα" κλειδί για να ελέγξετε αν πρόκειται για έγκυρο αίτημα και εάν επιτρέπεται η επεξεργασία του ωφέλιμου φορτίου.
  • Χρησιμοποιούμε "Σύνδεση", "όνομα" και "αναφ" για να δημιουργήσετε έναν ενοικιαστή εάν δεν υπάρχει.

Η δομή του αρχείου

Η δομή αρχείων στο διακομιστή έχει ρυθμιστεί έτσι ώστε να αποθηκεύουμε κάθε μισθωτή στον δικό του δημόσιο φάκελο και να έχουμε μια κεντρική εγκατάσταση του WordPress που χρησιμοποιούμε για αναφορά με symlink για κάθε μισθωτή.

Η δομή αρχείων μισθωτή έχει ως εξής:

ενοικιαστής/
| _ wp / / ** βασική εγκατάσταση symlink του WordPress
| _ content / / ** φάκελος περιεχομένου μισθωτή για WordPress
| | _ θέματα / / ** φάκελος θέματος μισθωτή για WordPress
| | _ plugins / / ** φάκελος ενοικιαστών plugins για WordPress
| _ .htaccess / ** αυτόματη δημιουργία .htaccess για μισθωτή
| _ vhost.conf / ** ψευδώνυμο αρχείο διαμόρφωσης για apache
| _ wp-config.php / ** αρχείο διαμόρφωσης που δημιουργήθηκε αυτόματα για ενοικιαστή

Ο wp / φάκελος αναφέρεται στην κεντρική εγκατάσταση του WordPress, την οποία μοιράζονται όλοι οι ενοικιαστές. Με αυτόν τον τρόπο, μπορούμε να έχουμε μία μόνο εγκατάσταση του WordPress και πολλές απομονωμένες παρουσίες ιστότοπων WordPress, καθεμία με ενσωματωμένες ρυθμίσεις, αρχεία και πόρους.

Τα αρχεία πυρήνα και μισθωτή wp-config.php

Core WordPress wp-config.php παράδειγμα:

/ ** Απόλυτη διαδρομή στον κατάλογο WordPress. * /
απαιτείται_once ($ _SERVER [‘CONTEXT_DOCUMENT_ROOT’]. ‘wp-config.php’);

/ ** Ρυθμίζει το WordPress και τα αρχεία που περιλαμβάνονται. * /
want_once (ABSPATH. ‘wp-settings.php’);

Παράδειγμα ενοικίασης wp-config.php:

(Οι τιμές που περιέχονται σε διπλά σγουρά τιράντες αντικαθίστανται αυτόματα κατά τη δημιουργία μισθωτή.)

/ ** ΠΡΟΣΘΗΚΗ ΑΠΟ API BOOTSTRAP * /
{{MYSQL_CONNECTION_TENANT_DATA}}

καθορισμός (‘AUTH_KEY’, ‘{{AUTH_KEY}}’);
καθορισμός (‘SECURE_AUTH_KEY’, ‘{{SECURE_AUTH_KEY}}’);
καθορισμός (‘LOGGED_IN_KEY’, ‘{{LOGGED_IN_KEY}}’);
καθορισμός (‘NONCE_KEY’, ‘{{NONCE_KEY}}’);
καθορισμός (‘AUTH_SALT’, ‘{{AUTH_SALT}}’);
καθορισμός (‘SECURE_AUTH_SALT’, ‘{{SECURE_AUTH_SALT}}’);
καθορισμός (‘LOGGED_IN_SALT’, ‘{{LOGGED_IN_SALT}}’);
καθορισμός (‘NONCE_SALT’, ‘{{NONCE_SALT}}’);

καθορισμός (‘WP_DEBUG’, false);

καθορισμός (‘WP_CONTENT_DIR’, ‘{{tenant_folder}} / περιεχόμενο’);
καθορισμός (‘WP_CONTENT_URL’, ‘{{tenant_folder}} / περιεχόμενο’);
καθορισμός (‘WP_PLUGIN_DIR’, ‘{{tenant_folder}} / content / plugins’);
καθορισμός (‘WP_PLUGIN_URL’, ‘{{tenant_url}} / content / plugins’);

εάν (! καθορισμένο (“ABSPATH”))
καθορισμός («ABSPATH», όνομα χρήστη (__ FILE__). »/ wp»);

Μετά τη δημιουργία του ενοικιαστή, ζητάμε ένα τελικό σημείο για να ανακτήσουμε πακέτα που απαιτούνται για την ανάπτυξη θεμάτων (plugins, θυγατρικά θέματα, βάση δεδομένων). Τα πακέτα αποθηκεύονται στην κρυφή μνήμη / αποθηκεύονται σε ένα φάκελο stash στον διακομιστή και ανανεώνονται κάθε έξι ώρες.

Το επόμενο βήμα είναι να ελέγξετε αν το θέμα που θέλουμε να αναπτύξουμε είναι μία ανάπτυξη ή πρέπει να δημιουργήσουμε επιπλέον θέματα από το βασικό.

  • Αν πρόκειται για μια μεμονωμένη ανάπτυξη, απλώς κάνουμε ένα git pull χρησιμοποιώντας "ssh_url" σε μισθωτή / περιεχόμενο / θέματα /.
  • Σε περίπτωση που δεν είναι μία ανάπτυξη, κάνουμε ένα git pull σε tmp /, τρέχουμε grunt δημιουργία και μετά αντιγράφουμε τους φακέλους που προκύπτουν σε μισθωτή / περιεχόμενο / θέματα /.

Η εργασία δημιουργίας grunt είναι ένα πρότυπο για εμάς όταν εργαζόμαστε με θέματα που έχουν πολλές εκδόσεις (συνήθως "ελαφριά" και "επαγγελματίας") ενώ χρησιμοποιείτε την ίδια βάση κώδικα (αποθετήριο). Για παράδειγμα, εάν εκτελέσουμε grunt create για το αποθετήριο hestia-pro, θα λάβουμε επίσης την έκδοση lite αυτόματα.

Αφού χειριστούμε τα παραπάνω, χρησιμοποιούμε το WP-CLI για την εγκατάσταση όλων των απαιτούμενων πακέτων (plugins ή / και θυγατρικά θέματα) και εισάγουμε την απόρριψη βάσης δεδομένων από το demo.themeisle.com.

Τα τελευταία βήματα είναι η εκκαθάριση των κανόνων επανεξέτασης .htaccess, ενημέρωση "siteurl" και "Σπίτι" με τη διεύθυνση URL του μισθωτή και τη διεύθυνση URL για το WordPress Core, ενημερώστε συνδέσμους για στοιχεία μενού και δημοσιεύσεις και, στη συνέχεια, φορτώστε ξανά το apache.

Στη συνέχεια, στέλνουμε στον χρήστη ένα email με τη διχασμένη διεύθυνση URL για το Αίτημα τραβήγματος και το αρχείο καταγραφής που δημιουργήθηκε κατά την ανάπτυξη. (Κάθε δημιουργός που ακολουθεί ακολουθεί αυτό το γενικό μοντέλο διεύθυνσης URL: http://forks.themeisle.com/github-login/theme-slug/branch/)

Πειρατικό Bootstrap – συμβουλές & κόλπα και άλλες χρήσιμες πληροφορίες

Όταν μεταβείτε στο forks.themeisle.com, μπορείτε να αποκτήσετε πρόσβαση σε μια διεπαφή τύπου τερματικού πατώντας το "~" (πλήκτρο tilde) και στη συνέχεια εκτελέστε μια δέσμη χρήσιμων εντολών από εκεί. Οι πιο σχετικές είναι:

Επαναφορά μιας ανάπτυξης μισθωτή

Η εντολή είναι πειρατής επαναφοράς ενοικιαστής [ενοικιαστής] (* θέμα-slug) |

Παράδειγμα:

πειρατής επαναφορά μισθωτή preda-bogdan / zerif-lite / ανάπτυξη |  

Ή:

πειρατής επαναφορά μισθωτή preda-bogdan / hestia / development hestia-pro |

Η εντολή επαναφοράς επαναφέρει τον μισθωτή στην αρχική του κατάσταση ανάπτυξης (επαναφορά βάσης δεδομένων, επανεγκατάσταση προσθηκών ή / και θυγατρικά θέματα).

Προβολή των αρχείων καταγραφής

Η εντολή είναι εμφάνιση αρχείων καταγραφής. Αυτή η εντολή είναι χρήσιμη εάν πρέπει να ελέγξετε τα αρχεία καταγραφής μετά από μια ανάπτυξη και δεν έχετε λάβει ακόμη email ή εάν πρέπει να εντοπίσετε σφάλματα.

Σημείωση: Το αρχείο καταγραφής περιστρέφεται εάν το μέγεθος του αρχείου είναι μεγαλύτερο από 9000 bytes, οπότε αν δεν μπορείτε να βρείτε αυτό που ψάχνετε, ίσως χρειαστεί να ελέγξετε απευθείας το αρχείο καταγραφής στο διακομιστή.

Pirate Wraith – συγκρίνει οπτικά δύο εκδόσεις ενός θέματος

Το Pirate Wraith φιλοξενείται στο wraith.themeisle.com

Το Pirate Wraith είναι χτισμένο στην κορυφή Φάντασμα και έχει τελικά σημεία για να αλληλεπιδράσει με αιτήματα Slack, Travis και AJAX προκειμένου να αξιοποιήσει τις δυνατότητες του Wraith και να δημιουργήσει δοκιμές και αναφορές οπτικής παλινδρόμησης.

Τράβις

Το Pirate Wraith εκθέτει ένα τελικό σημείο στο wraith.themeisle.com που ακούει αιτήματα από μια κατασκευή Travis και "αποτυγχάνει" ή "περνά" το build σύμφωνα με τα αποτελέσματα της δοκιμής οπτικής παλινδρόμησης.

Μέσα στο αρχείο .travis.yml, προσθέσαμε μια νέα μήτρα που καθορίζει μια νέα έκδοση πάνω από τις υπάρχουσες. Αυτό ορίζει δικαιώματα για την εκτέλεση ενός σεναρίου bash μέσα στο έργο και στη συνέχεια το εκτελεί.

Το αρχείο Travis YML:

μήτρα:
περιλαμβάνω:
– php: "7.0"
Before_install: chmod + x wraith.sh
εγκαθιστώ:
before_script:
env: TEST_SUITE = Wraith_Visual_Regression_Testing WRAITH_FAIL = 5
σενάριο: ./wraith.sh

Μπορείτε να το δείτε αυτό "εγκαθιστώ" και "Before_script" αφήνονται κενά. Αυτό είναι σκόπιμο, έτσι ώστε η έκδοση να μην κληρονομήσει ενέργειες από προηγούμενες καθορισμένες εκδόσεις. Μας ενδιαφέρει απλώς να τρέξουμε το bash script (script: ./wraith.sh) σε αυτό το build.

Επίσης να σημειωθεί? ορίζουμε μια μεταβλητή περιβάλλοντος που ονομάζεται WRAITH_FAIL. Αυτή η τιμή χρησιμοποιείται για να πει στο Pirate Wraith ποια είναι η μέγιστη επιτρεπόμενη εκατοστιαία διαφορά για να περάσει μια δοκιμή.

Το σενάριο Bash:

#! / bin / bash
WRAITH_SLUG = $ (κόμβος -pe "απαιτούν (‘./ package.json’). wraithSlug")
WRAITH_FAIL = $ {WRAITH_FAIL: -5}
σώμα ="{
‘αίτηση’: {
‘travis_event_type’: ‘$ TRAVIS_EVENT_TYPE’,
‘travis_pull_request’: ‘$ TRAVIS_PULL_REQUEST’,
‘travis_repo_slug’: ‘$ TRAVIS_PULL_REQUEST_SLUG’,
‘travis_branch’: ‘$ TRAVIS_PULL_REQUEST_BRANCH’,
“wraithSlug”: $ WRAITH_SLUG,
“wraithFail”: $ WRAITH_FAIL,
}
}"
ηχώ "Ενεργοποίηση κατασκευής κλάδου TRAVIS_PULL_REQUEST_SLUG $
$ TRAVIS_PULL_REQUEST_BRANCH ‘στο Travis."
έξοδος = $ (curl -sw "% {http_code}" -X ΜΕΤΑ
-Η "Τύπος περιεχομένου: application / json" \
-Η "Αποδοχή: application / json" \
-Η "Travis-API-Έκδοση: 3" \
-ρε "$ {σώμα // \ ‘/ \"}" \
“http://wraith.themeisle.com”)
http_code ="$ {έξοδος: $ {# έξοδος} -3}"
αν [$ {# output} -eq 3]; τότε
σώμα =""
αλλού
σώμα ="$ {έξοδος: 0: $ {# έξοδος} -3}"
fi

αν [$ http_code! = 200]; τότε
ηχώ "έξοδος $";
έξοδος 1
αλλού
ηχώ "έξοδος $";
έξοδος 0
fi

Με λίγα λόγια, αυτό το σενάριο δημιουργεί ένα ωφέλιμο φορτίο JSON που περιέχει προεπιλεγμένες μεταβλητές περιβάλλοντος Travis και αυτές που έχουν οριστεί από τον χρήστη. Επίσης, διαβάζει πακέτα.json και παίρνει το θέμα γυμνοσάλιαγκας.

Το δεύτερο μέρος του σεναρίου κάνει ένα αίτημα POST μέσω "μπούκλα" στο Pirate Wraith και αναλύει την απόκριση για να ανακτήσει τον κωδικό κατάστασης HTTP / 1.1 της απόκρισης.

Χρησιμοποιούμε τον κωδικό κατάστασης για να "αποτυγχάνω" ή "πέρασμα" η κατασκευή. Το Pirate Wraith API επιστρέφει έγκυρους κωδικούς HTTP / 1.1 για κάθε αίτημα που επεξεργάζεται.

  • Θα επιστρέψει τον κωδικό 200 για ολοκληρωμένες, επιτυχημένες δοκιμές.
  • Για οτιδήποτε άλλο, η κατασκευή θα αποτύχει με κωδικό εξόδου 1 (έξοδος 1)

Ίσως αναρωτιέστε τι είναι η σύγκριση του Wraith. Η απάντηση είναι απλή. συγκρίνει την ανάπτυξη μισθωτή του τρέχοντος αιτήματος τραβήγματος από το Pirate Bootstrap με την επίδειξη του θέματος προορισμού.

Για καλύτερη κατανόηση του κύκλου ζωής GitHub – Travis – Pirate Bootstrap – Pirate Wraith, ακολουθεί ένα διάγραμμα που απεικονίζει τη ροή εργασίας αυτών των υπηρεσιών:

Ροή εργασιών Pirate Bootstrap / Pirate Wraith

Οπως βλέπεις, GitHub ειδοποιεί και τα δύο Πειρατικό Bootstrap και Τράβις σχετικά με ένα νέο αίτημα τραβήγματος. Το Bootstrap αρχίζει να αναπτύσσει έναν μισθωτή, ρωτά ο Travis Πειρατής Wraith για να ξεκινήσετε τις δοκιμές.

Πειρατής Wraith συγκρίνει την έκδοση Tenant του Demo με το Θέμα Επίδειξη και επιστρέφει τα αποτελέσματα στο Τράβις, ώστε να μπορεί πέρασμα ή αποτυγχάνω η κατασκευή.

Χαλαρότητα

Εκτός από την υποστήριξη του Travis, το Pirate Wraith έχει ένα τελικό σημείο για ενσωμάτωση με το Slack.

Αφού ολοκληρωθεί μια έκδοση από το Travis (περάστε ή αποτύχετε), δημιουργείται μια αναφορά μέσα στο κανάλι #eyepatch, που περιέχει έναν σύνδεσμο προς τη γκαλερί που δημιουργήθηκε και μια περίληψη των διαφορών που βρέθηκαν.

Επίσης ενσωματωμένες είναι μερικές χρήσιμες εντολές Slack που μπορείτε να χρησιμοποιήσετε σε οποιοδήποτε κανάλι (Σημείωση: Το Pirate Wraith API θα ανταποκριθεί σε αυτό το κανάλι με δημόσια απάντηση, οπότε σας συνιστούμε να χρησιμοποιήσετε τις εντολές σε αυτο συνομιλία). Ακολουθούν οι εντολές για το Slack:

Επαναφορά των βασικών στιγμιότυπων ιστορικού ενός θέματος

/ wraith-history [θέμα-γυμνοσάλιαγκας]

Παράδειγμα:

/ wraith-history zerif-lite |

Συγκρίνοντας με τις λήψεις ιστορικού ενός θέματος

/ wraith-τελευταία [θέμα-slug] [url]

Παράδειγμα:

/ wraith-τελευταία zerif-lite http: //forks.url/pb/zerif-lite |

Αυτή η εντολή χρησιμοποιεί το παρεχόμενο slug για να συγκρίνει τη δεδομένη διεύθυνση URL με το ιστορικό αυτού του slug.

Σύγκριση δύο διευθύνσεων URL

/ wraith-σύγκριση [url] έναντι [url]

Παράδειγμα:

/ wraith-σύγκριση http://url.one έναντι http: //url.two 

Pirate Wraith – συμβουλές & κόλπα και άλλες χρήσιμες πληροφορίες

Επαναφορά των βασικών στιγμιότυπων ιστορικού ενός θέματος

wraith επαναφορά ιστορικού [θέμα-slug]

Αυτή η εντολή επαναφέρει το ιστορικό για το συγκεκριμένο slug.

Συγκρίνοντας με τις λήψεις ιστορικού ενός θέματος

wraith check τελευταία [θέμα-slug] [url]

Αυτή η εντολή χρησιμοποιεί το παρεχόμενο slug για να συγκρίνει τη δεδομένη διεύθυνση URL με το ιστορικό αυτού του slug.

Σύγκριση δύο διευθύνσεων URL

wraith σύγκριση url [url-one] [url-two]

Προβολή των αρχείων καταγραφής

Η εντολή είναι εμφάνιση αρχείων καταγραφής. Αυτή η εντολή είναι χρήσιμη εάν πρέπει να ελέγξετε τα αρχεία καταγραφής. Λειτουργεί με τον ίδιο τρόπο όπως στο Pirate Bootstrap.

Η λήψη σου?

Αυτό συνοψίζει σχεδόν δύο νέες υπηρεσίες μας και πώς μπορούν να χρησιμοποιηθούν για την αυτοματοποίηση της ανάπτυξης θέματος WordPress.

Δημιουργήσαμε τόσο το Pirate Bootstrap όσο και το Pirate Wraith για να εξυπηρετήσουμε τις δικές μας ανάγκες, αλλά πιστεύουμε ότι αυτές οι έννοιες μπορούν να είναι εξίσου χρήσιμες και σε όσους εργάζονται σε παρόμοια προγράμματα dev. Ειδικά αν δημιουργείτε παράγωγα προϊόντα (όπως θέματα Pro και lite WordPress στην περίπτωσή μας) και θέλετε να ελέγξετε τι είδους επιπτώσεις έχουν συγκεκριμένες αλλαγές κώδικα στις εμφανίσεις τους.

Το θέμα με τα θέματα WordPress είναι ότι οι βάσεις κώδικα των περισσότερων σύγχρονων θεμάτων τείνουν να αναπτύσσονται αρκετά γρήγορα και ορισμένα συγκεκριμένα στοιχεία αυτών των βάσεων κώδικα μπορούν να έχουν απρόβλεπτες επιπτώσεις στην εμφάνιση άλλων στοιχείων του θέματος. Η προσπάθεια να τα πιάσετε όλα αυτά χειροκίνητα – απλά κοιτάζοντας τα πράγματα μέσα από τα ανθρώπινα μάτια σας – μπορεί να είναι πραγματικά δύσκολη, οπότε είναι πάντα μια τεράστια βοήθεια για να εισαγάγετε μια μορφή αλγορίθμου / αυτοματισμού στο μείγμα.

Αλλά τι νομίζεις; Βλέπετε την αξία αυτών των εργαλείων και για άλλα έργα?

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map