如何根据查询字符串元值重定向到WordPress自定义单篇fs_parks文章?
实现方案
首先,你需要先注册osm_geometry这个自定义查询变量——WordPress默认不识别这个参数,不注册的话get_query_var拿不到对应值。把下面代码加到主题的functions.php文件里:
function register_osm_geometry_query_var( $vars ) { $vars[] = 'osm_geometry'; return $vars; } add_filter( 'query_vars', 'register_osm_geometry_query_var' );
接下来,把你的查询逻辑放到template_redirect钩子中执行——这个钩子是WordPress准备加载页面模板前触发的,刚好适合做重定向操作。同样把代码加到functions.php:
function redirect_to_park_by_osm_geometry() { // 只在fs_parks的归档页执行,避免干扰其他页面 if ( is_post_type_archive( 'fs_parks' ) ) { $osm_id = get_query_var( 'osm_geometry' ); // 如果没有osm_geometry参数,直接返回 if ( empty( $osm_id ) ) { return; } $args = array( 'post_type' => 'fs_parks', // 注意和你的自定义文章类型名称保持一致,原代码写的fs_park是错的 'post_status' => 'publish', 'posts_per_page' => 1, 'meta_query' => array( array( 'key' => 'osm_geometry', 'value' => $osm_id, 'compare' => '=', ) ) ); $dbResult = new WP_Query( $args ); // 如果找到对应的文章,跳转到详情页 if ( $dbResult->have_posts() ) { $dbResult->the_post(); wp_safe_redirect( get_permalink() ); exit; // 必须加exit终止后续代码执行 } else { // 没找到对应内容的情况,示例跳回fs_parks归档页,也可以改成跳404 wp_safe_redirect( get_post_type_archive_link( 'fs_parks' ) ); exit; } // 重置查询环境,避免影响其他逻辑 wp_reset_postdata(); } } add_action( 'template_redirect', 'redirect_to_park_by_osm_geometry' );
注意几个关键细节:
- 原代码里的
post_type写的是fs_park,但你的自定义文章类型是fs_parks,必须保持一致,否则查询会失败 - 用
wp_safe_redirect比原生header()更安全,符合WordPress开发规范 - 执行重定向后一定要加
exit,防止后续代码继续运行导致异常 - 查询结束后调用
wp_reset_postdata(),重置查询环境避免影响页面其他逻辑
这样当用户点击www.example.com/fs_parks?osm_geometry=12345时,就会自动跳转到对应的公园详情页了。
内容的提问来源于stack exchange,提问作者spreaderman
相关产品推荐
相关产品推荐

