web-dev-qa-db-fra.com

Modifier l'URL du site via functions.php d'un thème

L'URL de mon site dans la base de données affiche sitea.com. Est-il possible de changer ceci via functions.php en siteb.com, tout en maintenant toujours sitea.com dans la base de données?

Mon scénario actuel est que trois développeurs travaillent localement et que nous souhaitons utiliser une base de données. Nous nous connectons tous à une base de données distante. Cependant, les URL de notre environnement de développement local et de la base de données distante sont différentes, ce qui provoque des liens rompus.

Existe-t-il un moyen de changer la variable siteurl dans functions.php tout en conservant la même URL dans la base de données?

Merci d'avance.

1
iamTony

Si au lieu de modifier functions.php, vous pouvez modifier wp-config.php, vous pouvez utiliser les éléments suivants:

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

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

3
fergbrain

Cela ne devrait pas du tout être traité par votre thème, mais par votre fichier wp-config.php local. Vous pouvez charger de manière conditionnelle des définitions wp-config locales et uniques en encapsulant un file_exists conditionnel. Voici un exemple de 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'  );
}

Voir ici pour plus de détails: https://markjaquith.wordpress.com/2011/06/24/wordpress-local-dev-tips/

2
Matt Cromwell

Le filtre theme_root_uri permettra de modifier à la volée les URL renvoyées par get_stylesheet_directory_uri() et get_template_directory_uri():

/**
 * 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 );

Le filtre plugins_url permettra à l'URL renvoyée par plugin_dir_url() d'être modifiée de la même manière:

/**
 * 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 );

En parcourant /wp-includes/link-template.php, de nombreuses autres fonctions renvoient des URL, mais elles peuvent être filtrées selon la même approche que celle décrite ci-dessus.

Les valeurs pour les options siteurl et home peuvent également être modifiées à la volée:

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