使用自定义域和301重定向创建额外的短URL

时间:2018-02-24 作者:gimsech

我想再创建一个简短的Post Permalink版本,通过301重定向到真实的Post URL。

较短版本的URL应该得到我作为post meta添加的自定义字段。它被称为$trick\\u nummer

所以我有:

mydomain。com/%postname%/

此外,我想要:

mydomain。com/Tipp%trick\\u nummer%

我认为应该是这样的:

    add_action("init", "tipp_rewrite_rule");

    function tipp_rewrite_rule() {

        add_rewrite_rule(

            \'^tipp([a-zA-Z0-9]+?)\',
            \'index.php?$trick_nummer%\',
            \'top\'
            );
    }
例如:

mydomain。com/i-am-the-post-name

和较短的链接(trick\\u nummer将为“7”)

mydomain。com/Tipp7

使用301重定向到

mydomain。com/i-am-the-post-name

我发现了这个问题:Redirect short-form URL to long-form URL (post_id to post_id + post_name)但我想要的区别是,我需要自定义字段中的数字。

我想在函数中这样做。php

1 个回复
最合适的回答,由SO网友:Milo 整理而成

第一步是重写规则。我还添加了一个重写标记,以便解析自定义查询变量。您还可以使用query_vars 而是对此进行筛选。

add_action( \'init\', \'tipp_rewrite_rule\' );
function tipp_rewrite_rule() {
    add_rewrite_tag( \'%trick_nummer%\', \'([a-zA-Z0-9]+)\' );
    add_rewrite_rule(
        \'^tipp([a-zA-Z0-9]+)?\',
        \'index.php?trick_nummer=$matches[1]\',
        \'top\'
    );
}
第二步是拦截这些请求、加载帖子和重定向。我们使用parse_request 操作,它传递一个请求对象,我们可以检查trick_nummer 查询变量。

然后我们创建一个新的WP_Query 在中查找具有匹配值的帖子trick_nummer 元键,并在找到元键时重定向:

add_action( \'parse_request\', \'wpd_catch_tipp_requests\' );
function wpd_catch_tipp_requests( $query ) {
    if( ! is_admin() && isset( $query->query_vars[\'trick_nummer\'] ) ){
        $the_post = new WP_Query(
            array(
                \'meta_key\'   => \'trick_nummer\',
                \'meta_value\' => $query->query_vars[\'trick_nummer\']
            )
        );
        if( $the_post->have_posts() ){
            wp_redirect( get_permalink( $the_post->post->ID ) );
        } else {
            wp_redirect( home_url() );
        }
    }
}

结束

相关推荐

Stuck In a Redirect Loop

我正在尝试构建一个代码,让非成员重定向到登录页。不幸的是,我构建的代码部分工作,并导致重定向循环。if(is_user_logged_in() && function_exists(\'pmpro_hasMembershipLevel\') && pmpro_hasMembershipLevel()) { global $current_user; $current_user->membership_level = pmpro_getM