2012-10-18 8 views
7

एक WordPress साइट (http://www.example.com), मैं पहले तो जैसे wp-config.php में WP_SITEURL और WP_HOME मानों को ओवरराइड किया गया था पर स्थानीय विकास कर रही है के लिए:अवहेलना WP_SITEURL और वर्डप्रेस के लिए WP_HOME एकाधिक

define('WP_SITEURL', 'http://local-example/'); 
define('WP_HOME', 'http://local-example/'); 

यह मैं नकल करने की अनुमति होगी डेटाबेस और साइट फ़ाइलों को स्थानीय सर्वर पर, और आवश्यकतानुसार संशोधनों को स्थानीय स्थापना पर परीक्षण करना।

इंस्टॉलेशन को वर्डप्रेस मल्टीसाइट में कनवर्ट करना आवश्यक था ताकि उपयोगकर्ताओं, प्रमाणीकरण, प्लगइन्स इत्यादि को मुख्य साइट और एक माध्यमिक साइट के बीच साझा किया जा सके, जो सबडोमेन (http://second.example.com) पर होस्ट किया गया हो।

विधि से ऊपर अब काम करता है कोई wp_options तालिका में मूल्यों को भी पार करने के लिए, लेकिन मैं अनिश्चित हूं wp_blogs में एंट्री के लिए एक मूल्य निर्धारित करने के लिए उचित तरीके के साथ-साथ प्राथमिक और उप डोमेन के लिए wp_2_options तालिका।

मेरी HOSTS फ़ाइल अपडेट करना कुछ हद तक कामकाज है, लेकिन यह आदर्श नहीं है (मैं लाइव साइट, आदि की तुलना करने में सक्षम नहीं हूं)। चल रही स्क्रिप्ट डेटाबेस मूल्यों को बदलने के लिए एक और विकल्प मैं कोशिश की है है, लेकिन थोड़ा और अधिक जटिल है, इसलिए मेरे सवालों का है या नहीं, wp-config.php के रूप में एक सेटिंग फ़ाइल में इन मूल्यों को भी पार करने के लिए एकाधिक में एक विकल्प है, इस तरह होती है, और यदि हां यह कैसा दिखता है।

उत्तर

9


अद्यतन: अतिरिक्त विवरण के साथ पूर्ण अद्यतन प्लगइन कोड यहां पाया जा सकता: http://justinsilver.com/technology/wordpress/wordpress-plugins/wordpress-plugin-wp-server-migration/
मैं के साथ एक समाधान के साथ आने में सक्षम था @ user916011 की मदद। मैं अपने विकास के वातावरण के लिए wp_options तालिका (रों) कॉपी करने के लिए के रूप में वे विन्यास कि आवश्यक हैं शामिल सक्षम होने के लिए की जरूरत है। एकाधिक में WP_SITEURL और WP_HOME मूल्यों को निर्धारित करने में सक्षम नहीं होने के मुद्दे पर काबू पाने के लिए, मैं _config_wp_siteurl() और _config_wp_home() कार्यों कि गैर एकाधिक इंस्टॉल किए जाने कि एक प्लगइन में शामिल है के लिए उपलब्ध हैं कि उपलब्ध नेटवर्क चौड़ा है को बदलने के लिए कोई कस्टम फ़िल्टर लिखा था और wp-config.php में कॉन्फ़िगर किया गया है। मैं तो एक स्थानीय डेटाबेस के लिए wp_site और wp_blogs छोड़कर डेटाबेस तालिकाओं के सभी नकल करने में सक्षम हूँ।

मैं अत्यधिक मदद करने के लिए अपनी सामग्री में यूआरएल को संभालने के क्रिस मर्फी द्वारा URL Token Replacement Techniques for WordPress 3.0 लेख सलाह देते हैं।

यह उदाहरण example.com और दो सबडोमेन, www.example.com और second.example.com के डोमेन के साथ एक सबडोमेन मल्टीसाइट इंस्टॉल स्थापित करता है। स्थानीय विकास यूआरएल www.example.local और second.example.local क्रमशः किया जाएगा।

डाटाबेस परिवर्तन:

अद्यतन wp_site में डोमेन मूल्य:

UPDATE wp_site SET domain = 'example.local' WHERE domain = 'example.com'; 

अद्यतन डोमेन मूल्य (रों) wp_blogs में:

UPDATE wp_blogs SET domain = 'www.example.local' WHERE domain = 'www.example.com'; 
UPDATE wp_blogs SET domain = 'second.example.local' WHERE domain = 'second.example.com'; 

प्लगइन कोड: निम्नलिखित प्लगइन नेटवर्क-व्यापी स्थापित किया जाना चाहिए।

<?php 
/* 
Plugin Name: MultiSite WP_HOME and WP_SITEURL 
Plugin URI: http://doublesharp.com/ 
Description: Allows wp_options values to be overwritten in wp-config.php for MultiSite 
Author: Justin Silver 
Version: 1.0 
Author URI: http://doublesharp.com 
License: GPL2 
*/ 

function _ms_config_wp_siteurl($url = '') { 
    if (is_multisite()): 
     global $blog_id, $current_site; 
     $cur_blog_id = defined('BLOG_ID_CURRENT_SITE')? BLOG_ID_CURRENT_SITE : 1; 
     $key = ($blog_id!=$cur_blog_id)? $blog_id.'_' : ''; 
     $constant = 'WP_'.$key.'SITEURL'; 
     if (defined($constant)) 
      return untrailingslashit(constant($constant)); 
    endif; 
    return $url; 
} 
add_filter('option_siteurl', '_ms_config_wp_siteurl'); 

function _ms_config_wp_home($url = '') { 
    if (is_multisite()): 
     global $blog_id; 
     $cur_blog_id = defined('BLOG_ID_CURRENT_SITE')? BLOG_ID_CURRENT_SITE : 1; 
     $key = ($blog_id!=$cur_blog_id)? $blog_id.'_' : ''; 
     $constant = 'WP_'.$key.'HOME'; 
     if (defined($constant)) 
      return untrailingslashit(constant($constant)); 
    endif; 
    return $url; 
} 
add_filter('option_home', '_ms_config_wp_home' ); 
?> 

कॉन्फ़िगर WP-config.php:

wp-config.php करने के लिए नए स्थिरांक जोड़ें। प्राथमिक साइट मानक WP_HOME और WP_SITEURL का उपयोग करना चाहिए और तृतीयक यूआरएल WP_{$blog_id}_HOME और WP_{$blog_id}_SITEURL

define('WP_HOME',  'http://www.example.local'); 
define('WP_SITEURL', 'http://www.example.local'); 
define('WP_2_HOME', 'http://secondary.example.local'); 
define('WP_2_SITEURL', 'http://secondary.example.local'); 
+0

यह सही है। बहुत बहुत धन्यवाद। – slifty

+0

कोई समस्या नहीं, मैंने यहां सामग्री में लिंक को प्रतिस्थापित करने सहित अधिक सामान करने के लिए थोड़ा विस्तार किया: http://justin.ag/technology/wordpress-plugins/wordpress-plugin-wp-server- माइग्रेशन/मेटा हुक टिप्पणी की गई है क्योंकि मैं कुछ मुद्दों (जो कैशिंग से संबंधित हो सकता है) में भाग गया था, लेकिन मैं इसे बिना किसी समस्या के थोड़ी देर के लिए अपने मल्टीसाइट्स में से एक पर उपयोग कर रहा हूं। यूआरएल पुनर्लेखन करने के लिए आपको 'WP_DEVELOPMENT = true' निरंतर परिभाषित करने की आवश्यकता है, यूआरएल टोकन प्रतिस्थापन हर समय चलना चाहिए। – doublesharp

+0

आखिरी परिभाषाओं ने प्लगइन और सब कुछ करने के बाद मुझे बचाया ... लेकिन मुझे नेटवर्क वर्डप्रेस एडमिन पेज पर फिर से जाना और प्रत्येक साइट पेज को फिर से सहेजना पड़ा। – shaneonabike

1

आप functions.php

update_option("siteurl","http://example.com"); 
update_option("home","http://example.com"); 
+0

इस समाधान के साथ समस्या यह है कि जब मैं स्थानीय रूप से साइट चलाता हूं, तो उसका URL 'http: // local-example /' है जो http: //www.example के डेटाबेस मान से मेल नहीं खाता है। प्राथमिक साइट के मामले में com '। इस वजह से, 'functions.php' में कोई भी कोड निष्पादित नहीं किया गया है, इसलिए विकल्प अपडेट नहीं किए गए हैं। मुर्गियों और अंडे। – doublesharp

1

में update_option इस्तेमाल कर सकते हैं एक ऐसी ही सवाल यहाँ कहा जा रहा है: Team Development of a Wordpress Site जो मैं के लिए एक संभव समाधान प्रदान की है। आपके मामले में, आप उस सीमा तक नहीं जाना चाहेंगे (हालांकि यह बहुत लचीला होगा); हालांकि, आप हमेशा उस उत्तर के उस हिस्से को देख सकते हैं जो डोमेन-प्रतिस्थापन तकनीक का उल्लेख करता है।

मैं रेखांकित किया है कि यहाँ समाधान: URL Token Replacement Techniques...

+0

अच्छा, वास्तव में बहुत अच्छी जानकारी है, खासकर यूआरएल टोकन प्रतिस्थापन। दुर्भाग्यवश, यह मेरे मामले में पूरी तरह से मदद नहीं करता है क्योंकि मुझे वास्तविक डेटाबेस मानों को ओवरराइड करने की आवश्यकता है (जो मैं 'wp-include/ms-settings.php' को देखकर बता सकता हूं। – doublesharp

+0

असल में, आप के केस 2 में हैं समाधान मैंने उस अन्य पोस्ट में उल्लिखित किया है। यह WP (हालांकि अकेले WP के मूल निवासी नहीं) के साथ एक सतत समस्या है, और दुर्भाग्यवश, समस्या के लिए कोई आसान समाधान नहीं है - जब तक कि आप कुछ प्रॉक्सी जादू नहीं करना चाहते हैं या कुछ जटिल जटिल बनाना चाहते हैं एक '.htaccess' फ़ाइल में रूटिंग नियम। WP एमयू/मल्टी-साइट के साथ मेरा अनुभव यह है कि आपको शुरू करने से पहले अपने वातावरण को पहले से (दृष्टिकोण के साथ रूपरेखा के साथ) कॉन्फ़िगर करने की आवश्यकता है। अन्यथा, यह बहुत सारे SQL प्रश्न हैं अपने डीबी में मूल्यों को प्रतिस्थापित करने के लिए – user916011

+0

तकनीकी रूप से केस 2 में, लेकिन साइट लाइव नहीं है इसलिए मैं सेटअप के रूप में जो कुछ भी कर सकता हूं वह कर सकता हूं।समस्या प्रति सामग्री में यूआरएल नहीं है, यह 'wp_options [' siteurl '] '(प्राथमिक साइट),' wp_site ['डोमेन']' (मल्टीसाइट साइट), 'wp_blogs [' डोमेन 'में सहेजे गए यूआरएल है। ] '(प्राथमिक, दूसरे ब्लॉग) और 'wp_2_options [' siteurl ']' (द्वितीयक साइट)। पहले मुझे केवल 'wp_options [' siteurl ']' के बारे में चिंता करना पड़ता था और 'wp-config.php' में इसे ओवरराइड कर सकता था, लेकिन मुझे यह नहीं लगता कि प्रत्येक बार जब मैं डेटाबेस को कॉपी करता हूं तो इन तालिका मानों को अद्यतन किए बिना इसे कैसे किया जाए । अब के लिए सामग्री यूआरएल अनदेखा। – doublesharp

1

मैं एक ही मुद्दा था और संभव के रूप में WP-config.php में परिभाषित करने WP_HOME & WP_SITEURL के रूप में इसी तरह एक समाधान चाहता था का उपयोग करना चाहिए ।

मैं प्लगइन का उपयोग नहीं कर सकता, क्योंकि मैं जीआईटी के साथ समन्वयित कर रहा हूं और मेरे रिपो में प्लगइन नहीं रखना चाहता हूं और मुझे हर बार प्लगइन जोड़ना होगा ... मुझे लगता है कि यह नेटवर्क चौड़ा सक्रिय हो सकता है wp_sitemeta तालिका के माध्यम से ... लेकिन यह मेरे लिए आदर्श नहीं था।

मैं इस समाधान के साथ आया था।

wp_blogs, wp_site, wp_sitemeta को सिंक न करना सुनिश्चित करें। और फिर $table_prefix नीचे कहीं अपने स्थानीय WP-config.php में यह कोड शामिल:

/* Update local database */ 
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error()); 
mysql_select_db(DB_NAME); 

$result = mysql_query("SELECT * FROM `". $table_prefix ."blogs`") or die(mysql_error()); 
while($row = mysql_fetch_array($result)) 
{ 
    $id = (1 == $row['blog_id']) ? '' : $row['blog_id'] .'_'; 
    mysql_query("UPDATE `". $table_prefix . $id ."options` SET `option_value`='http://". $row['domain'] ."/' WHERE (`option_name`='siteurl' OR `option_name`='home')") or die(mysql_error()); 
} 

यह सुनिश्चित करें कि आपके साइटों अपने स्थानीय wp_blogs तालिका करने के लिए सिंक किए गए हैं कर देगा।

एकमात्र कमी यह है कि जब आप कोई नई साइट जोड़ते हैं, तो आपको मैन्युअल रूप से इसे अपनी wp_blogs तालिका में कॉपी करने और उसके स्थानीय यूआरएल को अपडेट करने की आवश्यकता होती है।

+1

मुझे विश्वास नहीं है कि मैंने ऐसा करने के बारे में नहीं सोचा था। यह प्रत्येक पृष्ठ लोड पर अपडेट चलाएगा - आप यह निर्धारित करने के लिए विकल्प तालिका में एक मान का उपयोग कर सकते हैं कि आपको इसे रोकने के लिए अपडेट को चलाने की आवश्यकता है या नहीं, भले ही यह प्रदर्शन प्रदर्शन में से अधिक न हो। पीडीओ या माइस्क्ली भविष्य के सबूत के लिए भी अच्छा होगा, भले ही वर्डप्रेस अभी भी mysql_ * एक्सटेंशन का उपयोग कर रहा हो। – doublesharp

+1

यदि आप पूरे डेटाबेस को रीफ्रेश करने में सक्षम होना चाहते हैं तो एक और विकल्प होगा 'wp_config.php' में एक सरणी में blog_id => url mappings को स्टोर करना और' ब्लॉग ',' साइट्स 'और' विकल्प' टेबल अपडेट करें) उसका इस्तेमाल कर रहे हैं। – doublesharp

+0

निश्चित रूप से विकल्प हैं। यह वास्तव में सरल है। सरणी भी एक अच्छा विकल्प हो सकता है। मैंने इसे इस तरह से करना शुरू किया, लेकिन इसके खिलाफ फैसला किया। मुझे यकीन नहीं है कि अब क्यों ... शायद क्योंकि ब्लॉग टेबल में पहले से ही साइट आईडी हैं ... यह हर पृष्ठ लोड पर चल रहा है, लेकिन चूंकि मैं इसे स्थानीय रूप से उपयोग कर रहा हूं, मुझे परवाह नहीं है। मैं इसे एक जीवंत वातावरण के लिए परिष्कृत कर दूंगा, और जब मैं इसका उपयोग नहीं कर रहा हूं तो मैं इसे टिप्पणी करता हूं। और यह प्लगइन के रूप में लगभग मजबूत नहीं है। जाहिर है सामग्री में लिंक अभी भी एक के लिए अपरिवर्तित छोड़ दिया गया है, लेकिन मैं बस कुछ सरल और पोर्टेबल चाहता था। – Jake

संबंधित मुद्दे