it-swarm-tr.com

WordPress Multisite’de birincil siteyi değiştirme

Bir WordPress Multisite ortamında birkaç alt etki alanı sitesi çalıştırıyoruz ve birincil siteyi kökten şöyle bir alt etki alanına geçirmek istiyoruz:

Mevcut site example.com ile ID 1 (alan değiştirildiğinden ve değiştirilemediğinden yeniden adlandırılamaz)

Yeni site new.example.com ile ID 15 (example.com olarak yeniden adlandırmaya çalıştı)

Siteleri yeniden adlandırmak ve wp-config.php dosyasını güncellemek için SITE_ID_CURRENT_SITE ve Blog_ID_CURRENT_SITE için yeni 15 kodu vermek üzere bazı yönergeleri takip ettim. Sonuçta, ana site değişmedi ve yönetici tıka basa kaldı.

Gönderi/sayfa ve eklentileri içe aktarmadan, ana siteyi değiştirmenin ve alt etki alanı sitesi içeriğiyle değiştirmenin düz bir yolu var mı?


GÜNCELLEŞTİRME:

Bu ipuçlarını verdiğiniz için teşekkür ederiz. Veritabanında gördüğüm, okuduğum ve sizden aldığım sonuçla, ana siteyi değiştirecek yeni alt etki alanı sitesinin, temel tablo adlarının ve kimliği 1, güncellenmiş yolların vb. Olması gerekir. Bunları değiştirdikten sonra ağ yöneticisinin bir problemi olacaktır - bu yüzden temel tabloları (wp_options etc) eşdeğeriyle (wp_x_options etc) karşılaştırmalıyım, bu ağ tablolarında ağ yöneticisi ile ilgili benzersiz bir şey olup olmadığını görmek için.

5
jamie

Dört yaşında ve cevap yok mu? İşte başlıyoruz… -

Aşağıdaki ağ kurulumunu örnek olarak alalım (WP-CLI'nın site list komutunu kullanıyorum):

$ wp site list
+---------+--------------------+---------------------+---------------------+
| blog_id | url                | last_updated        | registered          |
+---------+--------------------+---------------------+---------------------+
| 1       | http://wp.tmp/     | 2016-08-04 08:39:35 | 2016-07-22 09:25:42 |
| 2       | http://foo.wp.tmp/ | 2016-07-22 09:28:16 | 2016-07-22 09:28:16 |
+---------+--------------------+---------------------+---------------------+

Ağ sitesi listesi şöyle görünür:

 network site list 

Siteyi 2 kimliğine sahip siteyi http://wp.tmp/ URL'sine sahip yeni kök site olarak kullanmak istiyoruz. Bu aslında sadece ID ve URL'ler için diğer bazı değerlerle birlikte soruda açıklandığı gibi aynı sorundur.

wp-config.php'nin multisite alakalı kısmı muhtemelen şöyle görünür:

const MULTISITE            = TRUE;
const DOMAIN_CURRENT_SITE  = 'wp.tmp';
const PATH_CURRENT_SITE    = '/';
const SITE_ID_CURRENT_SITE = 1;
const BLOG_ID_CURRENT_SITE = 1;
const SUBDOMAIN_INSTALL    = TRUE;

Veritabanı sitesi ayarlarını güncelleme

WordPress, verilen bir istek URL'siyle eşleşen blogu bulmak ve bu blog için uygun kalıcı bağlantılar oluşturmak için wp_*_option ve wp_blogs tablolarını kullanır. Bu yüzden aşağıdaki üç tablodaki değerleri değiştirmeliyiz (bu örnek için):

  • wp_options içinde home ve siteurl anahtarları
  • wp_2_options anahtarlarında home ve siteurl anahtarları (bu durumda wp_15_options olur)
  • wp_blogs sütununda 1 ve 2 kimliğine sahip her iki site için domain sütunu (sırasıyla 15)

Bunun için Yönetici kullanıyorum, ancak başka bir DB yönetim aracı da (PhpMyAdmin) işi de yapıyor. (Ekran görüntüleri GUI'yi Alman dilinde gösteriyor, ancak fikrin açık olduğunu düşünüyorum.)

 adminer edit wp_options 

wp_options (site ID 1 için seçenekler tablosu) Her iki anahtarın home ve siteurl değerlerini http://wp.tmp'den http://foo.tmp'a değiştiririm. (Yukarıdaki ekran görüntüsü güncellemeden önceki durumu gösterir.)

Ben aynısını wp_2_options tablosu ile aynı şekilde yaparım, ancak burada değeri http://foo.wp.tmp'den http://wp.tmp'a değiştiririm.

Bir sonraki adım wp_blogs tablosunu güncellemektir:

 adminer edit wp_blogs  (Yine, ekran görüntüsü herhangi bir değişiklik yapmadan önce tabloyu gösterir.) Burada, domain sütunundaki her iki sitedeki değerleri de değiştirirsiniz:

  • wp.tmpfoo.wp.tmp olur ve
  • foo.wp.tmp, wp.tmp olur

Şimdi, yeni ayar verileriyle doğru şekilde başa çıkmak için wp-config.php öğesini güncellemelisiniz:

const MULTISITE            = TRUE;
const DOMAIN_CURRENT_SITE  = 'wp.tmp';
const PATH_CURRENT_SITE    = '/';
const SITE_ID_CURRENT_SITE = 1;
const BLOG_ID_CURRENT_SITE = 2; // This is the new root site ID
const SUBDOMAIN_INSTALL    = TRUE;

Bu noktada yine çalışan bir WordPress multisite'ınız var ancak yeni bir kök siteniz var:

$ wp site list
+---------+--------------------+---------------------+---------------------+
| blog_id | url                | last_updated        | registered          |
+---------+--------------------+---------------------+---------------------+
| 1       | http://foo.wp.tmp/ | 2016-08-04 08:39:35 | 2016-07-22 09:25:42 |
| 2       | http://wp.tmp/     | 2016-07-22 09:28:16 | 2016-07-22 09:28:16 |
+---------+--------------------+---------------------+---------------------+

 network site list updated 

Unutmayın: Bu işlem sırasında siteniz kullanılamayacak ve talepler bazı kötü hatalara neden olacak, böylece WordPress kurulumunuzun önünde bir 503 Service Unavailable yanıtı düzenlemek isteyebilirsiniz. Bu, .htaccess kullanılarak yapılabilir.

Veritabanı içeriğini güncelleme

Şimdi zor kısım geliyor. Şu anda, content tabloları içindeki tüm URL'ler hala eski sitelerin kaynaklarını gösteriyor. Ancak bunları değiştirmek o kadar kolay değil: İlk adımda her http://foo.wp.tmphttp://wp.tmp ile bir sonraki adımda http://wp.tmphttp://foo.wp.tmp ile değiştirmek, önceki tüm URL'lerin siteye ID 1 (http://foo.wp.tmp) işaret etmesiyle sonuçlanacaktır.

En iyi yol, bir ara adım eklemek olacaktır:

  • http://foo.wp.tmp arayın ve onu tercihen benzersiz bir sümüklü böcek ile değiştirin: http://3a4b522a.wp.tmp
  • http://wp.tmp öğesini ara ve http://foo.wp.tmp ile değiştirin
  • http://3a4b522a.wp.tmp öğesini ara ve http://wp.tmp ile değiştirin

Tüm bu arama ve değiştirme komutları, daha önce güncellediğimiz üç tabloyu (*_options*_blogs) yoksaymalıdır, aksi halde yapılandırmayı bozarlar. Ayrıca, URL'leri wp_*_options tablosunda home ve siteurl tuşlarının dışında manuel olarak da arayabilirsiniz.

WP-CLI'nın search-replace komutunu kullanmanızı tavsiye ediyorum, çünkü bunun için serileştirilmiş verilerle başa çıkabiliyor ve HTTP'nin sahip olabileceği herhangi bir sınırlama yok.

7
David

Daha kolay bir alternatif (herhangi bir kod satırına dokunmayı gerektirmeyen), hepsi bir arada - eklentisini kullanmaktır:

  1. new.example.comand ile ID 15 dışa aktar
  2. example.com ile ID 1 içine yeniden içe aktarın
0
SuperAtic