[英]Map arbitrary URL to in WordPress without 404 or “Page Not Found”
假設我的博客住在這里...
/blog/
假設我有無限多個任意網址...
/blog/browse/furniture/
/blog/browse/decor/
/blog/browse/bed/
我希望主題包裝程序為與/ browse / URL模式匹配的任何頁面加載browser.php模板。
我能夠做到這一點,但是,盡管模板內容加載得很好,但WordPress將頁面視為后台的404頁面。 因此頁面標題為“找不到頁面”,並且內置函數(例如“ is_404()”)返回true。 有沒有辦法映射這些動態頁面並使WordPress認為它們是有效的?
這是我想出的代碼...
add_filter('template_include', function($template) {
global $wp_query;
if ($wp_query->query['category_name'] === 'browse') {
$template = locate_template(array('browse.php'));
}
return $template;
}, 99);
順便說一句,該方法有效,因為我的永久鏈接結構設置為/%category%/%postname%/
-因此,當前,WordPress將這些/ browse /頁面視為一個類別,因此,我可以對照“ category_name” ”對象。
您能提供的任何幫助將不勝感激。
這里的問題是您只過濾了應該顯示的模板-因此Wordpress發送404,並且您只是告訴他針對這種特殊情況為404頁面顯示其他模板。
您需要做的是在admin中創建一個頁面並將其與您的模板相關聯-如果您不使用其內容或標題都沒有關系。 您只需要在模板上附加帖子/頁面即可制定有效的重寫規則。
您可以在激活時使用以下內容從插件創建該頁面(它將存儲頁面ID作為選項):
function register_activation_hook() {
if(get_option('browse_page_id') !== false) {
$page_id = wp_insert_post(array(
'post_title' => __('Your page title', 'plugin-domain'),
'post_content' => '',
'post_status' => 'publish',
'post_type' => 'page',
'post_author' => 1,
));
if($page_id && ! is_wp_error($page_id)) {
update_post_meta($page_id, '_wp_page_template', 'browse.php');
update_option('browse_page_id', $page_id, true);
}
}
}
register_activation_hook(__FILE__, 'register_activation_hook');
您必須在插件文件中使用它,然后停用/重新激活插件才能觸發它。
要使模板被Wordpress識別,請在模板頂部添加以下內容:
<?php
/**
* Template Name: Browse
*/
?>
然后,在您的functions.php中 ,添加以下內容以定義一個新的重寫標簽來處理您的類別:
function custom_rewrite_tag() {
add_rewrite_tag('%browse_category%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);
最后,添加一個重寫規則,該規則將使用先前創建的頁面ID和重寫標簽:
function custom_rewrite_rule() {
if(get_option('browse_page_id') !== false) {
add_rewrite_rule('^browse/([^/]*)/?','index.php?page_id='.get_option('browse_page_id').'&browse_category=$matches[1]','top');
}
}
add_action('init', 'custom_rewrite_rule', 10, 0);
要訪問模板中的category參數,請使用以下命令:
$wp_query->query_vars['browse_category']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.