web-dev-qa-db-ja.com

テーマのfunctions.phpでサイトのURLを変更する

データベース内の私のサイトのURLはsitea.comです。これをfunctions.phpを介してsiteb.comに変更することはできますが、それでもデータベース内でsitea.comを維持しますか?

私の現在のシナリオは、私は3人の開発者が現地で働いていて、1つのデータベースを使いたいということです。私たち全員がリモートデータベースに接続しますが、ローカル開発環境からのURLとリモートデータベースからのURLが異なるため、リンクが解除されます。

データベースに同じURLがあるのに、functions.phpsiteurlを変更する方法はありますか?

前もって感謝します。

1
iamTony

Functions.phpを変更する代わりにwp-config.phpを変更できる場合は、次のようにします。

define('WP_HOME','http://example.com');
define('WP_SITEURL','http://example.com');

出典: https://codex.wordpress.org/Changing_The_Site_URL#Edit_wp-config.php

3
fergbrain

これはあなたのテーマによって処理されるべきではなく、あなたのローカルのwp-config.phpファイルです。条件付きのfile_existsをラップすることで、ローカルで一意のwp-config定義を条件付きで読み込むことができます。これがMark Jaquithの例です。

if ( file_exists( dirname( __FILE__ ) . '/local-config.php' ) ) {
    include( dirname( __FILE__ ) . '/local-config.php' );
    define( 'WP_LOCAL_DEV', true ); // We'll talk about this later
} else {
    define( 'DB_NAME',     'production_db'       );
    define( 'DB_USER',     'production_user'     );
    define( 'DB_PASSWORD', 'production_password' );
    define( 'DB_Host',     'production_db_Host'  );
}

詳細についてはここを参照してください。 https://markjaquith.wordpress.com/2011/06/24/wordpress-local-dev-tips/

2
Matt Cromwell

theme_root_uriフィルタは、get_stylesheet_directory_uri()get_template_directory_uri()によって返されるURLをその場で変更することを可能にします。

/**
 * Filters the URI for themes directory.
 *
 * @since 1.5.0
 *
 * @param string $theme_root_uri         The URI for themes directory.
 * @param string $siteurl                WordPress web address which is set in General Options.
 * @param string $stylesheet_or_template Stylesheet or template name of the theme.
 */
function wpse_theme_root_uri( $theme_root_uri, $siteurl, $stylesheet_or_template ) {
    // $siteurl will be http://sitea.com via get_option( 'siteurl' )
    return str_replace( $siteurl, 'http://siteb.com', $theme_root_uri );
}
add_filter( 'theme_root_uri', 'wpse_theme_root_uri', 10, 3 );

plugins_urlフィルタはplugin_dir_url()によって返されたURLが同様の方法で変更されることを可能にします:

/**
 * Filters the URL to the plugins directory.
 *
 * @since 2.8.0
 *
 * @param string $url    The complete URL to the plugins directory including scheme and path.
 * @param string $path   Path relative to the URL to the plugins directory. Blank string
 *                       if no path is specified.
 * @param string $plugin The plugin file path to be relative to. Blank string if no plugin
 *                       is specified.
 */
function wpse_plugins_url( $url, $path, $plugin ) {
    return str_replace( get_option( 'siteurl' ), 'http://siteb.com', $url );
}
add_filter( 'plugins_url', 'wpse_plugins_url', 10, 3 );

/wp-includes/link-template.phpを見ると、URLを返す関数は他にもたくさんありますが、上で示したのと同じ方法でそれらをフィルタリングできます。

オプションsiteurlhomeの値もその場で変更することができます。

function wpse_pre_option_siteurl_and_home( $pre_option, $option ) {
    return 'http://siteb.com';
}
add_filter( 'pre_option_siteurl', 'wpse_pre_option_siteurl_and_home', 10, 2 );
add_filter( 'pre_option_home',    'wpse_pre_option_siteurl_and_home', 10, 2 );
2
Dave Romsey