如何从单一帖子访问感谢页面?

时间:2021-01-31 作者:Naren Verma

我在我的网站上有一个感谢页面,我不希望任何人都可以直接访问它,所以我使用下面的代码,它工作正常。

add_action(\'template_redirect\', function() {
    // ID of the thank you page
    if (!is_page(947)) { //id of page
        return;
    }

    // coming from the form, so all is fine
    if (wp_get_referer() === get_site_url().\'/contact-us/\') {
        return;
    }

    // we are on thank you page
    // visitor is not coming from form
    // so redirect to home
    wp_redirect(get_home_url());
    exit;
});
现在,我正在做的是,我在我的单个帖子上还有一个表单,一旦用户提交表单,它就会重定向到感谢页面,但它不会继续,因为我在我的function.php.

那么,有人知道如何从一篇帖子访问感谢页面吗?

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

<支持>Note: WordPress故意拼错了“referer”一词,因此,我也是

如果你只想检查推荐人是否是你的contact-us 页面或任何单个贴子页面,然后您可以首先检索当前URL路径(即。example.com/<this part>/) 然后检查路径是否正确contact-us (或者你的联系人页面的slug),并使用get_posts() 找到一个以该路径作为slug的帖子。

所以试试这个,它对我很有用(用WordPress 5.6.1测试):

// Replace this:
if (wp_get_referer() === get_site_url().\'/contact-us/\') {
    return;
}

// with this:
$path = trim( parse_url( wp_get_referer(), PHP_URL_PATH ), \'/\' );
// If it\'s the contact page, don\'t redirect.
if ( \'contact-us\' === $path ) {
    return;
} elseif ( $path ) {
    $posts = get_posts( array(
        \'name\'           => $path,
        \'posts_per_page\' => 1,
    ) );
    // If a post with the slug in $path was found, don\'t redirect.
    if ( ! empty( $posts ) ) {
        return;
    }
}
<但是请注意,只有在permalink结构(默认为post 类型)是/%postname%/ — 带或不带前导和/或尾随斜杠请记住,referer很容易被欺骗,因此您可能需要考虑一种更可靠的方法,例如使用寿命较短的瞬变或非瞬变

SO网友:Q Studio

最好匹配感谢页面,然后尝试匹配推荐人,如果这些条件不匹配,则什么也不做。

add_action(\'template_redirect\', function() {

    // match based on two condition:
    // current page is "thanks" - which I am guessing is "thanks"
    // and the referer is /contact-us/ - not this is unreliable, as referer might be empty
    if ( 
        is_page(\'thanks\') // is page "thanks"
    ) { 
  
        // referer matches
        if( wp_get_referer() === get_site_url().\'/contact-us/\' ) {
             
            error_log( \'All good..\' );
            return;

        } else {

            // redirect to home
            wp_redirect( get_home_url() );
            exit;

        }

    }

    // nothing to do here, as not thanks page

});

相关推荐