您好我需要找到一种方法,使用301重定向将已删除的页面重定向到另一个页面,具体页面取决于页面的URL。如果网址是 http://example.com/projects/test-page-redirectpage/然后它应该在页面删除后重定向到“重定向页面”。有数百个页面在URL的末尾有“重定向页面”,所以我不能通过和重定向插件来手动执行。已经写了下面的代码,但它只是按页面名称工作。我想要这样一个函数可以检测到来自URL的'redirectpage',如果该url没有退出那么它应该重定向到'redirectpage'
function get_page_by_name($pagename)
{
$pages = get_pages();
foreach ($pages as $page) if ($page->post_name == $pagename) return $page;
return false;
}
function redirect_301() {
$page = get_page_by_name('test-page-redirectpage');
if (empty($page)) {
wp_safe_redirect( home_url('http://example.com/redirectpage/'), 301 );
exit;
}
}
add_action( 'template_redirect', 'redirect_301', 1 );
答案 0 :(得分:0)
使用template_redirect
是正确的,但是您应该检查是否可以将URL转换为帖子ID和当前请求URL(来自全局$wp
对象)以发现redirectpage
字符串(在它的末尾):
function so_423_redirectpage_redirect()
{
global $wp;
if (url_to_postid(home_url($wp->request)) === 0 &&
('redirectpage' === substr(untrailingslashit($wp->request), -12) || 'redirect-page' === substr(untrailingslashit($wp->request), -13))) {
wp_safe_redirect(home_url('http://example.com/redirectpage/'), 301);
exit();
}
}
add_action('template_redirect', 'so_423_redirectpage_redirect');
答案 1 :(得分:0)
我认为你应该在这里使用404.php文件模板(来自你的主题),所以你很确定访问的页面不存在。 在get_header()函数之前,您可以执行以下检查:
$requested_uri = explode('/', $_SERVER[REQUEST_URI]);
if(strpos(array_pop($requested_uri), '-redirectpage') !== FALSE) {
wp_safe_redirect(site_url('redirectpage'), 301);
}