wordpress 如何根据查询字符串的Meta值重定向到单个帖子

6ioyuze2  于 2024-01-06  发布在  WordPress
关注(0)|答案(1)|浏览(183)

我是新的WordPress和不知道如何实现这一点。
我有一个名为fs_parks的自定义帖子类型。如果我去fs_parks,它是一个公园列表,正如预期的那样。如果我点击一个自定义帖子,我会得到一个奇异的帖子,正如预期的那样。
我有一个Map。Map上有一个像www.example.com/fs_parks?osm_geometry=12345的链接。点击后,我想重定向到一个单一的职位,并显示公园信息的基础meta_key=123456。我有一个Meta_key称为osm_geometry,每个公园都有一个唯一的值。
我知道我必须做一些事情,比如:

$args = array(
    'post_type' => 'fs_park',
    'post_status' => 'publish',
    'posts_per_page' => 1,
    'meta_query' => array(
         array(
              'key' => 'osm_geometry',
              'value' => get_query_var( 'osm_geometry' ),
              'compare' => '=',
      )
   )
);
$dbResult = new WP_Query($args);

字符串
但我不知道在哪里运行它,以确保它是在一个单一的职位。
任何帮助Mych感激。

pgvzfuti

pgvzfuti1#

要实现您想要的功能,请使用template_redirect操作钩子。此钩子在模板加载之前触发,允许您在满足某些条件时执行操作和重定向。
试试这个:

function redirect_to_park() {
    // Check if it is a single fs_park post
    if (is_singular('fs_park') && isset($_GET['osm_geometry'])) {
        $osm_geometry_value = sanitize_text_field($_GET['osm_geometry']);
        $args = array(
            'post_type'      => 'fs_park',
            'post_status'    => 'publish',
            'posts_per_page' => 1,
            'meta_query'     => array(
                array(
                    'key'     => 'osm_geometry',
                    'value'   => $osm_geometry_value,
                    'compare' => '=',
                ),
            ),
        );
        $dbResult = new WP_Query($args);
        // Check if there's a matching park
        if ($dbResult->have_posts()) {
            // Redirect to the first matching pak
            wp_redirect(get_permalink($dbResult->post->ID));
            exit();
        }
    }
}
add_action('template_redirect', 'redirect_to_park');

字符串
此代码检查两个条件:
a:当前页面是一个单一的fs_park帖子吗?
B:URL中是否设置了osm_geometry参数?
如果这两个条件都满足,它将根据osm_geometry值查询数据库以查找匹配的公园。如果找到匹配的公园,它将重定向到该公园的单个帖子页面。
将代码添加到主题的functions.php文件中。

相关问题