Δεν εφαρμόζεται το block template στο WordPress; Ξεκίνα από τη βάση δεδομένων
Κάνε το WordPress να σερβίρει ξανά το αρχείο προτύπου του θέματός σου, καθαρίζοντας το αντίγραφο που κρατά ο Site Editor στη βάση δεδομένων, και μετά απέκλεισε ονόματα αρχείων και προσωρινή μνήμη.
Δημοσιεύτηκε
Το αρχείο προτύπου σου σχεδόν σίγουρα αγνοείται επειδή κερδίζει ένα αντίγραφο μέσα στη βάση δεδομένων. Τη στιγμή που ανοίγεις ένα πρότυπο στον Site Editor και πατάς Αποθήκευση, το WordPress γράφει μια εγγραφή άρθρου wp_template, και από εκεί και πέρα σερβίρεται αυτή η εγγραφή αντί για το αρχείο .html μέσα στον φάκελο του θέματος — οπότε κάθε αλλαγή που κάνεις μετά στο αρχείο είναι αόρατη στο site. Το καθάρισμα εκείνης της εγγραφής είναι η λύση, και είναι το πρώτο που πρέπει να ελέγξεις πριν αγγίξεις την ιεραρχία, το όνομα του αρχείου ή την προσωρινή μνήμη.
Επιβεβαίωσε ότι υπάρχει αντίγραφο στη βάση
Πήγαινε στο Εμφάνιση → Editor → Πρότυπα. Κάθε πρότυπο που το WordPress σερβίρει από τη βάση δεδομένων επισημαίνεται στη λίστα — ανάλογα με την έκδοση του WordPress, η σήμανση γράφει «Προσαρμοσμένο» ή το πρότυπο εμφανίζεται κάτω από ένα αντίστοιχο φίλτρο. Αυτή η σήμανση είναι όλη η απάντηση. Αν υπάρχει, το αρχείο σου δεν χρησιμοποιείται.
Μπορείς να ελέγξεις το ίδιο πράγμα από τη γραμμή εντολών, που είναι πιο γρήγορο και δουλεύει ακόμη κι όταν ο Site Editor δεν συμπεριφέρεται σωστά:
wp post list --post_type=wp_template --fields=ID,post_name,post_status,post_title
wp post list --post_type=wp_template_part --fields=ID,post_name,post_status,post_title
Κάθε γραμμή είναι μια παράκαμψη από τη βάση δεδομένων. Το post_name ταιριάζει με το slug του προτύπου, οπότε μια γραμμή με όνομα single σκιάζει το templates/single.html.
Μια λεπτομέρεια που μπερδεύει τον κόσμο: αυτές οι εγγραφές συνδέονται με ένα θέμα μέσω όρου ταξινομίας, όχι μέσω διαδρομής. Αν μετονομάσεις τον φάκελο του θέματος, τα αποθηκευμένα πρότυπα μένουν στη βάση αλλά παύουν να ταιριάζουν με το ενεργό θέμα, και το site γυρίζει απότομα στα αρχεία. Αυτό μοιάζει με «εξαφανίστηκαν οι προσαρμογές μου» αντί για «αγνοείται το αρχείο μου» — ίδιος μηχανισμός, αντίθετο σύμπτωμα.
Καθάρισέ το
Στον Site Editor, άνοιξε το μενού επιλογών του προτύπου (οι τρεις τελείες δίπλα του) και διάλεξε Καθαρισμός προσαρμογών — σε κάποιες εκδόσεις γράφει Επαναφορά. Αυτό διαγράφει την εγγραφή της βάσης και ο έλεγχος επιστρέφει στο αρχείο του δίσκου.
Αν το μενού προσφέρει Διαγραφή αντί για Καθαρισμό προσαρμογών ή Επαναφορά, εκείνο το πρότυπο υπάρχει μόνο στη βάση δεδομένων και δεν έχει αρχείο από πίσω. Η διαγραφή του αφαιρεί εντελώς το πρότυπο και το WordPress κατεβαίνει την ιεραρχία.
Από το WP-CLI, με ένα ID από τη λίστα παραπάνω:
wp post delete 482 --force
Να είσαι ειλικρινής μαζί σου για το κόστος εδώ: ο καθαρισμός των προσαρμογών πετάει οριστικά ό,τι έχτισες στον Site Editor για εκείνο το πρότυπο, και δεν αναιρείται. Αν η εκδοχή του Site Editor έχει μέσα πραγματική δουλειά, αντίγραψε πρώτα τον κώδικα των μπλοκ — άνοιξε το πρότυπο στον επεξεργαστή, γύρισε στην προβολή κώδικα και επικόλλησε το αποτέλεσμα στο αρχείο .html. Έτσι το αρχείο γίνεται η πηγή αλήθειας και δεν χάνεται τίποτα.
Πώς διαλέγει το WordPress ένα πρότυπο
Τα block theme χρησιμοποιούν την ίδια λογική ιεραρχίας με τα classic theme, απλώς με αρχεία .html μέσα στο templates/ αντί για αρχεία .php στη ρίζα του θέματος. Το WordPress περνάει από το πιο ειδικό προς το πιο γενικό και χρησιμοποιεί το πρώτο αρχείο που υπάρχει.
| Τι προβάλλεται | Σειρά ελέγχου |
|---|---|
| Ένα μεμονωμένο άρθρο | single-post-{slug}.html → single-post.html → single.html → singular.html → index.html |
| Μια σελίδα | page-{slug}.html → page-{id}.html → page.html → singular.html → index.html |
| Ένα αρχείο κατηγορίας | category-{slug}.html → category-{id}.html → category.html → archive.html → index.html |
| Ένας προσαρμοσμένος τύπος περιεχομένου | single-{post-type}.html → single.html → singular.html → index.html |
| Η σελίδα 404 | 404.html → index.html |
Δύο πράγματα παρακάμπτουν τελείως αυτή τη σειρά. Πρώτον, η εγγραφή στη βάση δεδομένων που περιγράψαμε παραπάνω. Δεύτερον, ένα πρότυπο ανατεθειμένο απευθείας σε ένα άρθρο ή μια σελίδα — άνοιξε τον επεξεργαστή άρθρων, ψάξε το πάνελ Πρότυπο στην πλαϊνή στήλη και δες αν είναι επιλεγμένο κάτι συγκεκριμένο εκεί. Μια ρητή ανάθεση κερδίζει την ιεραρχία κάθε φορά, και είναι αόρατη αν δεν πας να την ψάξεις.
Τα πρότυπα που βασίζονται σε slug είναι εύθραυστα με τρόπο που αξίζει να τον έχεις στο μυαλό σου. Το page-about.html ταιριάζει μόνο όσο το slug της σελίδας είναι about. Μετονόμασε τη σελίδα σε about-us και το πρότυπο παύει να εφαρμόζεται, χωρίς προειδοποίηση και χωρίς σφάλμα.
Πρότυπο εναντίον τμήματος προτύπου
Ένα πρότυπο αποδίδει μια ολόκληρη προβολή και επιλέγεται από την ιεραρχία. Ένα τμήμα προτύπου είναι ένα κομμάτι — κεφαλίδα, υποσέλιδο, πλαϊνή στήλη — που το τραβούν μέσα τους τα πρότυπα. Τα τμήματα ζουν στο parts/, τα πρότυπα στο templates/, και αποθηκεύονται χωριστά στη βάση δεδομένων ως εγγραφές wp_template_part.
Η συνηθισμένη σύγχυση: επεξεργάζεσαι την κεφαλίδα και η αλλαγή εμφανίζεται σε σελίδες που δεν σκόπευες να αγγίξεις. Αυτή είναι η σωστή συμπεριφορά. Ένα τμήμα το μοιράζεται κάθε πρότυπο που το περιλαμβάνει. Αν θέλεις διαφορετική κεφαλίδα σε ένα μόνο πρότυπο, χρειάζεσαι δεύτερο αρχείο τμήματος και ένα πρότυπο που το αναφέρει — η επεξεργασία του κοινόχρηστου δεν πρόκειται ποτέ να σου δώσει διαφοροποίηση ανά πρότυπο.
Συμβαίνει και το αντίστροφο. Βάζεις μια ολόκληρη διάταξη σελίδας μέσα στο parts/ και απορείς γιατί δεν την πιάνει ποτέ η ιεραρχία. Τα τμήματα δεν είναι καν υποψήφια στην ιεραρχία· τίποτα δεν θα δρομολογηθεί ποτέ απευθείας σε αυτά.
Ονομασία και θέση αρχείων
Έλεγξε αυτά πριν υποθέσεις κάτι πιο εξωτικό:
- Ο φάκελος είναι
templates/, στον πληθυντικό, στη ρίζα του θέματος. Όχιtemplate/, όχιblock-templates/. Τοblock-templates/ήταν το σωστό όνομα την εποχή που το Gutenberg ήταν πρόσθετο, πριν τα block theme μπουν στον πυρήνα, και αρκετοί οδηγοί το δείχνουν ακόμη — δεν δουλεύει στις τρέχουσες εκδόσεις του WordPress. - Τα τμήματα προτύπων πάνε στο
parts/, όχι στοtemplate-parts/(που είναι η σύμβαση των classic theme για τα κομμάτια PHP). - Η κατάληξη είναι
.html. Ένα αρχείο.phpμέσα στοtemplates/αγνοείται. - Τα ονόματα αρχείων είναι πεζά και χρησιμοποιούν παύλες. Το
single-Post.htmlή τοsingle_post.htmlδεν θα ταιριάξει. Σε σύστημα αρχείων που δεν ξεχωρίζει πεζά και κεφαλαία, όπως το macOS, αυτό δουλεύει τοπικά και σπάει σε διακομιστή Linux — η κλασική αποτυχία τύπου «στο δικό μου μηχάνημα δουλεύει». - Το
templates/index.htmlπρέπει να υπάρχει. Χωρίς αυτό, το WordPress δεν κατατάσσει το θέμα ως block theme και ο Site Editor μπορεί να μην εμφανιστεί καθόλου. - Αν δουλεύεις σε θυγατρικό θέμα, τα δικά του πρότυπα έχουν προτεραιότητα έναντι του γονικού. Ένα ξεχασμένο αρχείο στο θυγατρικό θέμα θα κερδίζει σιωπηλά το γονικό αρχείο που επεξεργάζεσαι.
Τα προσαρμοσμένα πρότυπα που θέλεις να μπορούν να επιλεγούν στον επεξεργαστή άρθρων πρέπει επίσης να δηλωθούν στο theme.json κάτω από το customTemplates, με το βασικό όνομα του αρχείου, έναν αναγνώσιμο τίτλο και τους τύπους περιεχομένου στους οποίους ισχύουν. Χωρίς αυτή την καταχώριση το αρχείο υπάρχει αλλά δεν εμφανίζεται ποτέ στο πάνελ Πρότυπο.
Προσωρινή μνήμη — έλεγξέ την τελευταία
Η προσωρινή μνήμη είναι υπαρκτό ζήτημα, αλλά είναι η λιγότερο πιθανή αιτία, και το να την κυνηγήσεις πρώτη είναι ο τρόπος να χάσεις ένα ολόκληρο απόγευμα.
Καθάρισε τη μνήμη σελίδων και, αν τρέχεις μόνιμη μνήμη αντικειμένων όπως Redis ή Memcached, καθάρισε και αυτήν — τα αποτελέσματα επίλυσης προτύπων μπορεί να κρατιούνται εκεί. Μετά ξαναφόρτωσε παρακάμπτοντας τη μνήμη του φυλλομετρητή.
Τι δεν θα βοηθήσει: το καθάρισμα του OPcache. Τα block template είναι αρχεία .html και δεν μεταγλωττίζονται ποτέ από την PHP, οπότε το OPcache δεν έχει καμία σχέση με αυτά. Αν κάποια φορά σου φάνηκε ότι το καθάρισμα του OPcache το διόρθωσε, κάτι άλλο άλλαξε την ίδια στιγμή.
Ακόμη κολλημένος;
Αν δεν υπάρχει εγγραφή στη βάση, το όνομα του αρχείου είναι σωστό, δεν υπάρχει ρητή ανάθεση προτύπου στο άρθρο και οι μνήμες έχουν ήδη καθαριστεί, κοίτα τα πρόσθετα. Οτιδήποτε φιλτράρει την επίλυση προτύπων — ένας page builder, ένα πρόσθετο συνδρομών, ένα πρόσθετο πολυγλωσσικότητας, μια πλατφόρμα μαθημάτων — μπορεί να βάλει το δικό του πρότυπο αργά μέσα στο αίτημα. Γύρισε σε ένα προεπιλεγμένο block theme και δοκίμασε με τα πρόσθετα απενεργοποιημένα, μετά ενεργοποίησέ τα ένα ένα.
Και αν το πρότυπο όντως εφαρμόζεται αλλά εμφανίζεται άδειο, αυτό είναι άλλο πρόβλημα: έλεγξε ότι ο κώδικας μπλοκ μέσα στο αρχείο είναι έγκυρος, αφού ένα κακοδιατυπωμένο σχόλιο μπλοκ μπορεί να κάνει τον επεξεργαστή να αφαιρέσει σιωπηλά το περιεχόμενο αντί να βγάλει σφάλμα.
FAQ
Ερωτήσεις
Γιατί δεν εφαρμόζεται το block template μου στο WordPress;
Συνήθως επειδή ένα αποθηκευμένο αντίγραφο στη βάση δεδομένων υπερισχύει του αρχείου. Τη στιγμή που επεξεργάζεσαι ένα πρότυπο στον Site Editor και πατάς Αποθήκευση, το WordPress δημιουργεί μια εγγραφή άρθρου wp_template και σερβίρει αυτήν αντί για το αρχείο .html μέσα στον φάκελο του θέματος. Κάθε αλλαγή στο αρχείο μετά από εκείνο το σημείο είναι αόρατη στο site.
Πώς κάνω το WordPress να χρησιμοποιήσει το αρχείο του θέματος αντί για την εκδοχή του Site Editor;
Άνοιξε Εμφάνιση, μετά Editor, μετά Πρότυπα, βρες το πρότυπο και χρησιμοποίησε το μενού επιλογών του για να καθαρίσεις τις προσαρμογές ή να το επαναφέρεις. Αυτό διαγράφει την εγγραφή της βάσης και επιστρέφει τον έλεγχο στο αρχείο του δίσκου. Αν το μενού προσφέρει Διαγραφή αντί για Επαναφορά, το πρότυπο υπάρχει μόνο στη βάση δεδομένων και δεν έχει αρχείο από πίσω.
Πού μπαίνουν τα αρχεία block template μέσα σε ένα θέμα WordPress;
Τα ολόκληρα πρότυπα μπαίνουν σε έναν φάκελο templates στη ρίζα του θέματος, και τα επαναχρησιμοποιήσιμα τμήματα σε έναν φάκελο parts. Και τα δύο χρησιμοποιούν κατάληξη .html, πεζά ονόματα αρχείων και παύλες αντί για κάτω παύλες. Ένα block theme απαιτεί επίσης να υπάρχει το templates/index.html, αλλιώς το WordPress δεν θα το θεωρήσει καν block theme.
Ποια είναι η διαφορά ανάμεσα σε πρότυπο και τμήμα προτύπου;
Ένα πρότυπο αποδίδει μια ολόκληρη σελίδα και επιλέγεται από την ιεραρχία προτύπων ανάλογα με το τι προβάλλεται. Ένα τμήμα προτύπου είναι ένα κομμάτι, όπως μια κεφαλίδα ή ένα υποσέλιδο, που το τραβάει μέσα του ένα πρότυπο. Αν επεξεργαστείς το τμήμα της κεφαλίδας αλλάζεις κάθε πρότυπο που το περιλαμβάνει, γι' αυτό οι αλλαγές σε τμήματα συχνά μοιάζουν να εφαρμόστηκαν σε λάθος σημείο.
Μήπως φταίει η προσωρινή μνήμη που δεν ενημερώνονται τα block template;
Καμιά φορά, αλλά είναι η λιγότερο πιθανή αιτία και πρέπει να ελέγχεται τελευταία. Οι μνήμες σελίδων και οι μόνιμες μνήμες αντικειμένων μπορούν να κρατούν παλιό κώδικα, οπότε καθάρισέ τες και τις δύο πριν βγάλεις συμπέρασμα. Το καθάρισμα του OPcache δεν κάνει τίποτα εδώ, επειδή τα block template είναι αρχεία .html και δεν μεταγλωττίζονται ποτέ από την PHP.
Γιατί σταμάτησε να δουλεύει το πρότυπο page-slug που είχα;
Τα πρότυπα που βασίζονται σε slug αντιπαραβάλλονται με το slug του τρέχοντος άρθρου τη στιγμή του αιτήματος. Αν μετονομάσεις μια σελίδα αλλάζει το slug της, οπότε το page-about.html παύει σιωπηλά να ταιριάζει μόλις η σελίδα γίνει about-us. Το ίδιο ισχύει για πρότυπα κατηγοριών και ετικετών. Ή μετονόμασε το αρχείο ώστε να ταιριάζει με το νέο slug ή ανάθεσε ρητά το πρότυπο από την πλαϊνή στήλη του επεξεργαστή άρθρων.