Marketing ADvertising CREAtive & Music

ARTICLE

Next level διαχείριση WordPress με εντολές στη βάση δεδομένων

Posted By

wordpress-gears

Η πλατφόρμα του WordPress είναι ένα από τα δημοφιλέστερα συστήματα διαχείρισης περιεχομένου (Content Management System) παγκοσμίως.

Η διαφορά των CMS από τις απλές HTML ιστοσελίδες είναι ότι τα πρώτα επιτρέπουν τον έλεγχο του ιστοτόπου και τη δημοσίευση άρθρων/σελίδων από ένα online κεντρικό σημείο του, το “backend”, στο οποίο συνδέοντα μόνο οι διαχειριστές ή και τα εγγεγραμμένα μέλη. Με λίγα clicks, δηλαδή, χωρίς τη γνώση κάποιας γλώσσας προγραμματισμού.

Το WordPress (WP εφεξής χάριν συντομίας) διανέμεται δωρεάν. Στο διαδίκτυο υπάρχουν εκατοντάδες δωρεάν και μη θέματα και πρόσθετα που συμβάλλουν στο “στήσιμο” μίας ιστοσελίδας με CMS χωρίς ιδιαίτερη δυσκολία. Βέβαια, η περαιτέρω παραμετροποίηση κάθε πλατφόρμας απαιτεί – έστω τη βασική – γνώση κώδικα PHP.

To WP, όπως και τα υπόλοιπα CMS, βασίζουν τη λειτουργία τους στις βάσεις δεδομένων. Σε αυτές αποθηκεύονται όλες οι ρυθμίσεις, επιλογές και δημοσιεύσεις που εκτελούνται από το backend. Οι βάσεις προγραμματίζονται με τη γλώσσα SQL και η λογική τους στηρίζεται στη δημιουργία πολλαπλών”πινάκων” όπου ο καθένας περιέχει μία σειρά “κελιών” και δεδομένων.

Παραδείγματος χάρη: Σε μία βάση WP υπάρχουν πίνακες για τις δημοσιεύσεις καθεαυτές, τις επιλογές που τις συνοδεύουν, τις γενικές ρυθμίσεις κ.ο.κ. Στον πίνακα “δημοσιεύσεις”, φερ’ ειπείν, για κάθε post συναντούμε από μία γραμμή με “κελιά” όπως “αύξων αριθμός”, “ημερομηνία”, “περιεχόμενο” κ.ά.

Η χρήση του website προσθέτει συνεχώς καινούρια στοιχεία στη βάση. Μερικά από αυτά είναι ελάχιστα έως καθόλου χρήσιμα. Γι’ αυτό το λόγο η βάση χρειάζεται επιμέλεια, ώστε να διαγράφεται ό,τι περιττό τη βαραίνει. Επιπλέον, το “πείραγμα” της βάσης βοηθά στην πραγματοποίηση πολλών τρίτων ενεργειών.

Προσοχή: Πριν την οποιαδήποτε αλλαγή στη βάση δεδομένων του WP, είναι αναγκαία η αποθήκευση ενός αντιγράφου της (backup) μέσω της επιλογής “Export – Εξαγωγή” για την αντιμετώπιση πιθανών λαθών.

Η database είναι προσβάσιμη μέσω του control panel του server στον οποίο φιλοξενείται ο ιστότοπος και της επιλογής “PHPmyAdmin” (σ.σ. εάν δεν είναι ορατή, υπάρχει σίγουρα η ένδειξη “MySQL” και εντός αυτού του μενού η “PHPmyAdmin”). Μία περιήγηση στους πίνακες, χωρίς να αλλαχθεί κάτι, βοηθά στην κατανόηση της δομής της βάσης.

Σε κάθε περίπτωση, οι εντολές οι οποίες θα παρατεθούν εισάγονται από το πεδίο “Κώδικας SQL”.

Η χρήση των ακόλουθων εντολών γίνεται με αποκλειστική ευθύνη του χρήστη. Το MADCREAM δεν αναλαμβάνει καμία ευθύνη. Η ύπαρξη backup είναι αναγκαία.

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

Διαγραφή αναθεωρήσεων (Revisions)

Κάθε αλλαγή στα άρθρα δημιουργεί μία νέα αναθεώρηση (revision). Οι αναθεωρήσεις είναι ωφέλιμες για την επαναφορά των δημοσιεύσεων σε προγενέστερη κατάσταση, ειδικά όταν το περιεχόμενο έχει αλλάξει ριζικά. Δεκάδες άρθρα και πολλές αναθεωρήσεις μεγαλώνουν σε μέγεθος τη βάση. Η διαγραφή τους αφήνει ανεπηρέαστο το τρέχον δημοσιευμένο περιεχόμενο κάθε post.

Για τη διαγραφή των αναθεωρήσεων τοποθετούνται στο πεδίο “Κώδικας SQL” οι γραμμές:

DELETE a,b,c FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision'

Πιο σύντομα:

DELETE FROM wp_posts WHERE post_type = "revision";

Tip: Το WordPress αποθηκεύει όλα τα revisions. Μία εναλλακτική προκειμένου να αποφευχθούν οι αλλαγές στη βάση είναι ο καθορισμός του μέγιστου αριθμού αναθεωρήσεων που θα κρατά το σύστημα.

Αντί για το PHPmyAdmin εδώ απαιτείται η πρόσβαση στα αρχεία του site στο server (Μέσα από το control panel του hosting ή από τον Η/Υ και client εφαρμογές όπως ο Filezilla). Για να καθοριστεί ο μέγιστος αριθμός των αποθηκευμένων revisions, στο αρχείο wp-cofing.php προστίθεται η γραμμή:

/*  Saved Post Revisions */
define('WP_POST_REVISIONS', 2);

* O αριθμός “2” υποδεικνύει τις αναθεωρήσεις που θα αποθηκεύονται και είναι ενδεικτικός. Μπορεί να αντικατασταθεί με όποιον άλλον επιθυμητό, κάλλιστα έως το πολύ 5 revisions.

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

Αλλαγή URL μετά από μεταφορά σε νέο domain

Κατά τη μεταφορά του WP από το localhost στον online server και αντιστρόφως ή από ένα domain σε ένα άλλο, υπάρχει ένα ουσιώδες πρόβλημα: Η βάση έχει παντού καταχωρισμέννο το αρχικό URL του site και αν δεν αλλαχθεί, η μεταφορά δε θα έχει επιτυχία.

– Ειδικά εδώ, η ύπαρξη Backup είναι ζήτημα ζωτικής σημασίας.

Επιστροφή στο PHPmyAdmin και το πεδίο “SQL”:

UPDATE wp_options SET option_value = replace(option_value, 'http://www.to-palio-domain.com', 'http://www.to-neo-domain.com') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://www.to-palio-domain.com','http://www.to-neo-domain.com');

UPDATE wp_posts SET post_content = replace(post_content, 'http://www.to-palio-domain.com', 'http://www.to-neo-domain.com');

Με προσοχή στην αντικατάσταση η ιστοσελίδα θα λειτουργεί κανονικά στο νέο domain.

– Όπου “http://www.to-palio-domain.com” τοποθετείται το παλιό domain από το οποίο το site “φεύγει” για να μεταφερθεί.
– Όπου “http://www.to-neo-domain.com” μπαίνει το νέο domain στο οποίο το site μεταφέρεται.

Στην περίπτωση μετακίνησης του ιστοτόπου από/σε localhost, το  “http://www.to-palio/neo-domain.com” γίνεται “http://localhost/onoma_fakelou”, χωρίς δηλαδή το πρόθεμα “www” και καταλήξεις “.com”, “.gr” κλπ.

Κάτι δεν έγινε σωστά; Εισαγωγή του αντιγράφου ασφαλείας και επανάληψη της εντολής με ακόμη πιο προσεχτική αντικατάσταση.

Eμφάνιση & διαγραφή διπλών δημοσιεύσεων (posts)

Εάν είναι δύσκολο να εντοπιστούν τα ενδεχόμενα διπλά άρθρα, η αναζήτηση και η διαγραφή τους πραγματοποιείται μαζικά με εντολή SQL. Η εντολή θα ψάξει για διπλά posts με βάση τον τίτλο τους.

Εμφάνιση μόνο διπλών posts, χωρίς διαγραφή:

SELECT a.ID, a.post_title, a.post_type, a.post_status
FROM wp_posts AS a
INNER JOIN (
SELECT post_title, MIN( id ) AS min_id
FROM wp_posts
WHERE post_type = 'post'
AND post_status = 'publish'
GROUP BY post_title
HAVING COUNT( * ) > 1
) AS b ON b.post_title = a.post_title
AND b.min_id <> a.id
AND a.post_type = 'post'
AND a.post_status = 'publish'

Διαγραφή διπλών posts κατευθείαν, χωρίς εμφάνιση:

DELETE a.*
FROM wp_posts AS a
INNER JOIN (
SELECT post_title, MIN( id ) AS min_id
FROM wp_posts
WHERE post_type = 'post'
AND post_status = 'publish'
GROUP BY post_title
HAVING COUNT( * ) > 1
) AS b ON b.post_title = a.post_title
AND b.min_id <> a.id
AND a.post_type = 'post'
AND a.post_status = 'publish'

Διαγραφή trash posts

Οι δημοσιεύσεις οι οποίες διαγράφονται από το backend καταλήγουν στην ενότητα “trash posts” ώσπου να διαγραφούν από εκεί οριστικά. Η ενέργεια της οριστικής διαγραφής λαμβάνει χώρα και από τη βάση δεδομένων:

DELETE p
FROM wp_posts p
LEFT OUTER JOIN wp_postmeta pm ON (p.ID = pm.post_id)
WHERE post_status = 'trash'

Μαζική αλλαγή κειμένου σε όλες τις δημοσιεύσεις/σελίδες

Μία εξαιρετικά χρήσιμη εντολή που εξοικονομεί χρόνο. Μέσω αυτής δύναται να αλλαχθεί μία συγκεκριμένη λέξη, φράση, πρόταση που υπάρχει σε πολλαπλά posts/pages με μία άλλη.

UPDATE wp_posts SET `post_content`
= REPLACE (`post_content`,
'Arxiko_Keimeno',
'Neo_Keimeno');

– Όπου “Arxiko_Keimeno”, η λέξη, φράση, πρόταση που θα αντικατασταθεί.
– Όπου “Neo_Keimeno”, η λέξη, φράση, πρόταση που παίρνει τη θέση του “Arxiko_Keimeno”.

Επί παραδείγματι,

Για την αλλαγή του τηλεφωνικού αριθμού “0123456” με τον “9999999” σε κάθε δημοσίευση χρησιμοποιείται η εξής εντολή:

UPDATE wp_posts SET `post_content`
= REPLACE (`post_content`,
'0123456',
'9999999');

Διαγραφή παλιών αλλαγμένων url των posts (slugs)

Στο WP γίνεται τα άρθρα και οι σελίδες να αποκτήσουν προσαρμοσμένα urls του τύπου “www.to-site-mou.com/auto-einai-to-onoma-tis-selidas“. Η ονομασία τους είναι συνήθως ο τίτλος της δημοσίευσης. Οι custom σύνδεσμοι μπορούν να αλλάξουν. Το παλιό link (slug) παραμένει αποθηκευμένο στη βάση και ανακατευθύνει στο ίδιο άρθρο. Αν για κάποιον λόγο η ύπαρξη των προηγούμενων slugs θεωρηθεί ανούσια, υπάρχει ο τρόπος να διαγραφούν.

Εμφάνιση μόνο των old slugs (λ.χ. για επιλεκτική διαγραφή):

SELECT * FROM wp_postmeta WHERE meta_key = '_wp_old_slug'

Διαγραφή όλων των old slugs, χωρίς να εμφανιστούν:

DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';

Μετά τη διαγραφή, οι παλιοί σύνδεσμοι θα οδηγούν σε σελίδα λάθους (404). Επειδή συμβαίνει αυτά τα links να συναντώνται ακόμη στις μηχανές αναζήτησης, στα social media και γενικώς οπουδήποτε είναι προτιμότερο να μη διαγράφονται.

Αλλαγή αρθρογράφου στις δημοσιεύσεις

Πρωτίστως, χρειάζεται του ID του κάθε εγγεγραμμένου μέλους. Τα ID όλων των μελών εμφανίζονται με την ακόλουθη εντολή:

SELECT ID, display_name FROM wp_users;

Για τη μεταφορά όλων των posts ενός συγκεκριμένου αρθρογράφου σε κάποιον άλλο:

UPDATE wp_posts SET post_author=ID_Neou_Author WHERE post_author=ID_Proigoumenou_Author;

– Όπου “ID_Neou_Author”, το ID του αρθρογράφου στον οποίο μεταφέρονται τα posts.
– Όπου “ID_Proigoumenou_Author”, το ID του αρθρογράφου από τον οποίο μεταφέρονται τα posts.

Μετατροπή σελίδων (pages) σε άρθρα (posts) & αντίστροφα

Μετατροπή όλων των σελίδων (pages) σε άρθρα (posts):

UPDATE wp_posts SET post_type = 'page' WHERE post_type = 'post'

Μετατροπή όλων των άρθρων (posts) σε σελίδες (pages):

UPDATE wp_posts SET post_type = 'post' WHERE post_type = 'page'

Αλλαγή του username των μελών & του admin

Το username των μελών μπορεί να αλλάξει σε οποιοδήποτε άλλο όνομα με μία γραμμή:

UPDATE wp_users SET user_login = 'Neo_Username' WHERE user_login = 'Palio_Username';

– Όπου “Palio_Username”, το τρέχον username του μέλους.
– Όπου “Neo_Username”, το νέο username που θα αποδοθεί στο μέλος.

Παρομοίως αλλάζει το username του admin, με όπου “Palio_Username” το “admin” ή όποιο όνομα έχει καθοριστεί.

Ολική διαγραφή των spam σχολίων

Τα spam comments είναι ένας πονοκέφαλος για κάθε διαχειριστή ιστοσελίδας. Είναι δυνατόν να διαγραφούν όλα μαζί από την database:

DELETE from wp_comments WHERE comment_approved = '0';
#SHAREit



Share the world!