WordPress Girilen Kayıtların Görüntülenmemesi
Auto_increment ve Datetime Problemi
Genel olarak web sitesi taşıma süreçleri muhtemel yapılandırma farklılıkları sebebiyle kimi zaman bazı hataların gözden kaçmasına ve ardından bir dizi problemin yaşanmasına sebebiyet verebiliyor. WordPress sahip olduğu kullanım yoğunluğu ve sunduğu özelleştirme imkanları sebebiyle olası gözden kaçan hatalar sebebiyle olumsuz eleştiriler alabiliyor. Bu tür durumların sistem değil, genelde kullanıcı (planlama, süreç yönetimi, vb. ihmallerden doğan) kaynaklı olduğunu özellikle belirtmek gerekiyor.
Yakın zamanda bir WordPress web sitesini sunucular arasında taşıdığınızı ve herhangi bir uyarı olmaksızın taşıma işleminin tamamlandığını varsayalım. Muhtemelen izlediğiniz adımlar öncelikle dosyaların taşınması (bu aşamada yeni bir WordPress kurulumu üzerine eklenti ve tema taşımız da olabilirsiniz) ve veritabanı tablosunun aktarımı olabilir. Genelde dosya taşımada yazma-okuma izinleri kolay bir şekilde yönetilebilmekte iken veritabanı temelinde karşılaşılan bildirimler göz ardı edilebilmekte.
Bu yazıda ele alınacak durum ve önerilecek çözüm, web sitesi taşıma işleminin tamamlanmasının ardından girilen içeriklerin görüntülenememesi, görsel yüklemelerinde "Ek, veritabanına eklenemedi" hatasının alınması, eklenen kullanıcıları için yetki tanımlanamaması gibi hatalarla karşılaşmış olabilirsiniz. Genelde bahsi geçen bu ve buna benzer durumların muhtemelen veritabanı kaynaklı olduğunu önden belirtmek uygun olacaktır.
WordPress Websitesi Taşıma ve Veritabanı Hataları
WordPress web sitesi taşıma işleminin tamamlanmasının ardından ilk ve en önemli konunun web sitesinin WP_DEBUG
aktifleştirilerek görüntülenmesi olduğunu düşünüyorum1. Bu sayede muhtemel problemler kolay bir şekilde fark edilebilecektir. Bu adımın atlanması sebebiyle, karşılaşılan hataların nedenlerine dair fikir edinmek zorlaşacak ve hataların bir dizi başka hatayı da beraberinde getirme ihtimali artacaktır.
WP_DEBUG
aktivasyon işlemi için wp-config.php
dosyasında yer alan ilgili satıra true
değerinin verilmesi yeterli olacaktır.
// Enable WP_DEBUG mode
define( 'WP_DEBUG', true );
Elbette hata kapsamını genişletmek ve log'lamak da yine problemin tespitine yönelik olarak ek fayda sağlayacaktır.
// Enable Debug logging to the /wp-content/debug.log file
define( 'WP_DEBUG_LOG', true );
// Disable display of errors and warnings
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
// Use dev versions of core JS and CSS files (only needed if you are modifying these core files)
define( 'SCRIPT_DEBUG', true );
Gelelim asıl konumuza. Yazının üst bölümünde de bahsettiğim üzere, bahsi geçen durumların genelde veritabanı tablo yapılandırması ile ilgili olduğu söylenebilir. Dosya temelli problemlerde hatanın fark edilmesi daha kolay iken veritabanı tablosundaki yapılandırma farklılıklarını ve buna bağlı problemleri tespit etmek biraz daha dikkatle inceleme yapmayı gerektirmekte.
Aşağıdakilerden maddelerden bir ya da birkaçı veya benzeri bir durum söz konusu ise problemin çözümüne yönelik olarak bir sonraki adıma geçilebilir.
- Eklenen bir yazı panel de dahil olmak üzere herhangi bir alanda görüntülenemiyorsa,
- Eklenen bir kullanıcı herhangi bir rol ile ilişkilendirilemiyorsa,
- Bir görsel yükleniyor ancak kayıt olarak galeride listelenmiyorsa
Yukarıdaki maddeler temel olarak tablo kayıtlarında sorun yaşandığına işaret etmektedir. Bir kayıt oluşturulduğunda (yazı, kullanıcı, görsel, vb.) eğer bir ID problemi yaşanmışsa ilgili kayıt tabloya yazılmış olsa da listelenmeyebilir. Genelde bu tür bir durum auto increment temelindeki bir duruma işaret eder. O halde, çözüm için tablolardaki ID sütun yapılandırmalarına göz atılması gerekmektedir.

Tablolarla ile ilgili güncel detaylar için WordPress Database Description sayfasında yer alan Table Details bölümü incelenebilir2. Bu bölüm referans olarak alındığında şu alanların primary key olarak işaretlenmiş ve auto_increment
özelliğinin aktifleştirilmiş olması gerekir. Bu sayede tabloya yeni bir kayıt eklendiğinde benzersiz bir sayının otomatik olarak oluşturulması sağlanır.
Table | Field |
---|---|
wp_commentmeta | meta_id |
wp_comments | comment_ID |
wp_links | link_id |
wp_options | option_id |
wp_postmeta | meta_id |
wp_posts | ID |
wp_terms | term_id |
wp_termmeta | meta_id |
wp_term_relationships | |
wp_term_taxonomy | term_taxonomy_id |
wp_usermeta | umeta_id |
wp_users | ID |
Görüldüğü üzere wp_term_relationships
dışındaki tüm tablolarda auto_increment
özelliği ID tanımları için kullanımda. Şayet, ilgili tabloda bu özellik aktif olmadan bir kayıt oluşturulmuşsa benzer veya hatalı (örn. 0
) bir değer alabilir. Bu durumda, karşılaşılan durum nezdinde ilgili tablodaki kayıtlara göz atılabilir.
Yukarıdaki maddeler temelinde, problemin yazılarla ilgili olduğunu düşünelim. İlk olarak, benzer ID değerlerinin olup olmadığına bakabiliriz.
SELECT ID, COUNT(*) AS count
FROM `wp_posts`
GROUP BY ID
HAVING COUNT(*) > 1;
Eğer bir tekrar eden kayıt dönmüş ise eklenen ikinci kaydı silebiliriz.
DELETE FROM `wp_posts`
WHERE ID IN (
SELECT ID
FROM (
SELECT ID
FROM `wp_posts`
GROUP BY ID
HAVING COUNT(*) > 1
) AS duplicates
ORDER BY ID DESC
) OR `ID` = 0;
Bu aşamadan sonra tablodaki ilgili ID değeri için auto_increment
özelliği aktifleştirilebilir.
ALTER TABLE `wp_posts`
MODIFY COLUMN `ID` INT AUTO_INCREMENT;
Ardından, tekrar yeni bir yazı eklendiğinde ilgili yazının aldığı ID değerine ve web sitesinde listelenip listelenmediğine bakılarak problemin çözüldüğünden emin olmak uygun olacaktır.
İstisnai bir durum olarak, auto_increment
özelliğini aktifleştirilmek istendiğinde veritabanı ile ilgili farklı bir hata dönebilir. Bu durumda, dönen hatanın öncelikli olarak çözülmesi gerekir. Örneğin, wp_posts
tablosu için post_date
, post_date_gmt
, post_modified
ve post_modified_gmt
için datetime default değeri ile ilgili bir sorun söz konusu ise bu çözülmesi gereken öncelikli işlem olacaktır. Tek tek default değer atamak mümkün olmayabileceği için işlemlerin planlı bir şekilde ele alınması gerekir. Örnek olarak aşağıdaki SQL satırı temel alınabilir.
ALTER TABLE `wp_posts`
MODIFY COLUMN `post_date` DATETIME DEFAULT CURRENT_TIMESTAMP,
MODIFY COLUMN `post_date_gmt` DATETIME DEFAULT CURRENT_TIMESTAMP;
MODIFY COLUMN `post_modified` DATETIME DEFAULT CURRENT_TIMESTAMP;
MODIFY COLUMN `post_modified_gmt` DATETIME DEFAULT CURRENT_TIMESTAMP;
Bu işlemlerin ilgili tüm tablolarda sıra ile gerçekleştirilmesi gerekir. Yine tablo yapılandırması ile ilgili gözden kaçan bir durum olup olmadığını anlamak için tablo detayları göz önünde bulundurulabilir ve farklılıklar bu şekilde düzenlenebilir.