这里有两种不同的解决方案 (编辑您的用例的细节):
做一个重定向:
1.) 在你的顶部 /wp-config.php
文件添加以下内容:
if ( is_yoursite_blogger_domain( $_SERVER['SERVER_NAME'] ) ) { $domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] ); define( 'WP_SITEURL', 'http://' . $domain ); define( 'WP_HOME', 'http://' . $domain ); } else if ( ! is_main_domain( $_SERVER['SERVER_NAME'] ) ) { header( "Location:http://{$yoursite_main_domain}", true, 301 ); exit; } function is_main_domain( $domain ) { $domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] ); return strpos( $domain, 'maindomain.com' ) !== false; } function is_yoursite_blogger_domain( $domain ) { $domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] ); return in_array( $domain, array( 'blogger1.com', 'blogger2.com', 'blogger3.com', 'blogger4.com', 'blogger5.com', 'uncategorized.dev', // Only here for use on my own test site ) ); }
2.) 然后将其添加到您的主题中 functions.php
文件:
add_action( 'template_redirect', 'yoursite_template_redirect' ); function yoursite_template_redirect() { $path = $_SERVER['REQUEST_URI']; if (strpos($path,"/category/") === false) { $domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] ) ; $category = str_replace( '.com', '', $domain ); $category = str_replace( '.dev', '', $domain ); // Only for my own test site $location = "http://{$domain}/category/{$category}/" ; wp_safe_redirect( $location ); exit; } } }
以上将做一个 302 重定向到 http://blogger1.com/category/blogger1/
当对任何 URL 发出请求时 http://blogger1.com
除了以 http://blogger1.com/category/
(您需要进行一些更改以支持其他 URL。)
做一个 “改写”:
以上不支持的是 “改写” 对一个 “重定向” 解决方案。 如果你想要它有点复杂。 以下代码将导致类别页面加载到映射到您的任何域的根路径中 is_yoursite_blogger_domain()
功能。 当然你的 is_yoursite_blogger_domain()
函数可以根据现有类别进行验证,但我不知道完整的标准,所以我只是对其进行了硬编码。 您可以将此代码复制到您的函数中 theme.php
文件或放入 .php
您可能正在编写的插件文件。 请注意,此代码还需要 /wp-config.php
上面的文件:
add_action( 'category_link', 'yoursite_category_link', 11, 2 ); function yoursite_category_link( $category_link, $category_id ) { // Make sure any blogger category links are truncated to the root $parts = explode( "https://wordpress.stackexchange.com/", $category_link ); if ( is_yoursite_blogger_domain( $parts[2] ) ) { // if %category% in http://%domain%/category/%category%/ // equals %domain% minus the 'com' extension if ( "{$parts[4]}." == substr( $parts[2], 0, strlen( $parts[4] ) + 1 ) ) { $category_link = "http://{$parts[2]}/"; // Strip 'category/%category%/' } } return $category_link; } add_action( 'init', 'yoursite_init' ); function yoursite_init() { // Remove the canonical redirect to the category page // if %category% in http://%category%.%ext%/ is a blogger category. if ( is_yoursite_blogger_domain( $_SERVER['SERVER_NAME'] ) ) { $parts = explode( "https://wordpress.stackexchange.com/", strtolower( $_SERVER['REQUEST_URI'] ) ); if (count($parts) > 1) { $category_base = get_option( 'category_base' ); if ( empty( $category_base ) ) $category_base="category"; if ( $category_base == $parts[1] ) { remove_filter( 'template_redirect', 'redirect_canonical' ); } } } } add_action( 'template_redirect', 'yoursite_template_redirect' ); function yoursite_template_redirect() { // Redirect any http://%category%.%ext%/category/%category%/ to http://%category%.%ext%/ if ( is_yoursite_blogger_domain( $_SERVER['SERVER_NAME'] ) ) { $category_base = get_option('category_base'); if (empty($category_base)) $category_base="category"; $parts = explode( "https://wordpress.stackexchange.com/", strtolower( $_SERVER['REQUEST_URI'] ) ); if ( $category_base == $parts[1] && "{$parts[2]}." == substr( $_SERVER['SERVER_NAME'], 0, strlen( $parts[2] ) + 1 ) ) { wp_safe_redirect( "http://{$_SERVER['SERVER_NAME']}/", 301 ); exit; } } } add_action( 'request', 'yoursite_request' ); function yoursite_request($query_vars) { // If %category% in http://%category%.%ext%/ is a blogger category set the // 'category_name' query var to tell WordPress to display the category page. $domain = $_SERVER['SERVER_NAME']; if ( is_yoursite_blogger_domain( $domain ) ) { $path = $_SERVER['REQUEST_URI']; if ( strpos( $path, "/category/" ) === false ) { $domain = str_replace( 'www.', '', $domain ) ; $category_name = substr( $domain, 0, strrpos( $domain, '.' ) ); $query_vars = array( 'category_name' => $category_name ); } } return $query_vars; }
这是显示第二个示例的屏幕截图:
(来源:mikeschinkel.com)
另一种可能更好的方法是使用自定义分类法而不是类别,或者更好的是,将域映射到用户名。 这样一来,作者的工作量就会减少,您不必担心在代码中或在单独的分类列表中维护博主列表。
至于你 “奖金”,对不起,但我没有按照你想要的去做。
原文链接:https://www.wordpresshy.com/325074
© 版权声明
声明📢本站内容均来自互联网,归原创作者所有,如有侵权必删除。
本站文章皆由CC-4.0协议发布,如无来源则为原创,转载请注明出处。
THE END