使用自动301重定向创建短URL

时间:2019-11-11 作者:user2812779

我找到了这个帖子(Create additional short URL with custom field and 301 redirect) 我尝试用我创建的自定义帖子类型来实现这一点,但它不起作用,我不知道在这种情况下我做错了什么。我得到的URL如下:

实例com/vacations/junior-advisuer-kabels-en-leidingen-p565148-6/

我想创建一个短URL,如下所示:

实例com/重定向/p565148-6/

并将301重定向到

实例com/vacations/junior-advisuer-kabels-en-leidingen-p565148-6/

我得到了一个名为“Vacations”的自定义帖子类型和一个自定义字段“Vacationure\\u id”。

我已经准备好了,但那没用。

add_action( \'init\', \'vacature_rewrite_rule\' );
function vacature_rewrite_rule() {
    add_rewrite_tag( \'%vacature_id%\', \'([a-zA-Z0-9]+)\' );
    add_rewrite_rule(
        \'^redirect([a-zA-Z0-9]+)?\',
        \'index.php?vacature_id=$matches[1]\',
        \'top\'
    );
}

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

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

只需使用parse_request 钩无需自定义重写规则和标记。

因此,请删除此选项(您应该刷新重写规则,只需访问永久链接设置页面即可):

add_action( \'init\', \'vacature_rewrite_rule\' );
function vacature_rewrite_rule() {
    ...
}

add_action( \'parse_request\', \'wpd_catch_vacature_requests\' );
function wpd_catch_vacature_requests( $query ) {
    if( ! is_admin() && preg_match( \'#^redirect/([\\w\\-]+)$#\', $query->request, $matches ) ){
        $posts = get_posts(
            array(
                \'post_type\'  => \'vacatures\',
                \'meta_key\'   => \'vacature_id\',
                \'meta_value\' => $matches[1],
                \'fields\'     => \'ids\'
            )
        );

        // Redirect to the post.
        if( ! empty( $posts ) ){ // a valid post found
            wp_redirect( get_permalink( $posts[0] ) );
        // Or otherwise, the homepage. Or you can remove this and a 404 page would be shown.
        } else {
            wp_redirect( home_url() );
        }
        exit;
    }
}

相关推荐

Php.ini中的UPLOAD_max_FILESIZE错误

我在上载大约2.3 MB大小的下载主题时出错,上载的文件超过了php中的upload\\u max\\u filesize指令。ini。当我尝试将upload\\u max\\u filesize=10MB的值从默认的2M更改为所有php时。ini,php。ini开发和php。ini生产我也遇到了同样的错误。我无法上载我下载的主题,而其大小约为2.3 MB。我正在使用XAMPP。提前谢谢。