Διαγραφή της “πρώτης εικόνας” από το content ΚΑΘΕ άρθρου προγραμματιστικά [parse_blocks]
Δημοσιεύθηκε 14/11/2021
Το πρόβλημα της “διπλής εικόνας”
Όταν μεταφέρουμε περιεχόμενο από ένα παλαιό site σε καινούριο αναλόγως την δομή περιεχομένου που έχει το παλαιό πιθανόν να αντιμετωπίσουμε το εξής πρόβλημα.
Πολλά themes, κυρίως παλαιοτέρων ετών, δεν χρησιμοποιούν την featured image, και έτσι ο αρθρογράφος περνάει ως πρώτο αντικείμενο μέσα στο άρθρο την κύρια εικόνα.
Κάτι τέτοιο μας δημιουργεί πρόβλημα όταν στο νέο theme ορίζουμε featured image, με αποτέλεσμα να εμφανίζεται η “δεύτερη” ίδια εικόνα στην αρχή του post content.
Η λύση
Με τη βοήθεια του Gutenberg και του block system που ακολουθεί, η αφαίρεση της αρχικής εικόνας από το content των άρθρων προγραμματιστικά και πολλά άλλα, είναι εφικτή.
Χρησιμοποιούμε την συνάρτηση parsed_blocks() με την οποία έχουμε πρόσβαση σε όλα τα block που απαρτίζουν το άρθρο ως string. Έτσι μπορούμε να κάνουμε τους σχετικούς ελέγχους, δηλαδή αν το πρώτο block του post content είναι εικόνα (‘core/image’) τότε θα σβήσουμε αυτό το block αφήνοντας όλο το υπόλοιπο content ως έχει.
Αυτή την διαδικασία την ακολουθούμε για όλα τα post.
Σημαντικό: Τον παρακάτω κώδικα τον τρέχουμε μία φορά, και μετά τον σβήνουμε.
$all_posts = get_posts(array(
'post_type' => array('post'),
'post_status' => 'any',
'numberposts' => -1,
));
foreach ($all_posts as $post) {
$parsed_blocks = parse_blocks($post->post_content);
$final_post_content = '';
// if first block is not image keep it as it is else delete
if ($parsed_blocks[0]['blockName'] !== 'core/image') {
$final_post_content .= serialize_block($parsed_blocks[0]);
}
// keep the rest of the content as is
for ($i = 1; $i < count($parsed_blocks); $i++) {
$final_post_content .= serialize_block($parsed_blocks[$i]);
}
wp_update_post(array('ID' => $post->ID, 'post_content' => $final_post_content));
}