Wordpress钩子用于验证用户的预定义URL

Wordpress钩子用于验证用户的预定义URL,wordpress,Wordpress,我正在构建一个相当复杂的项目,它有许多前端编辑页面。例如,从前端添加/编辑/列出自定义帖子类型、编辑配置文件等 目前,我当然可以检查用户是否登录到每个前端登录页面。然而,这似乎是解决这个问题的一个糟糕的方法,因为我将在许多页面上使用相同的条件,因此会有大量重复的代码 我在想,也许有一种更好的方法可以基于某个钩子(我找不到)进行身份验证。我希望我能做一些类似的事情: # create array of URLs where login is required $needLoginArr = arr

我正在构建一个相当复杂的项目,它有许多前端编辑页面。例如,从前端添加/编辑/列出自定义帖子类型、编辑配置文件等

目前,我当然可以检查用户是否登录到每个前端登录页面。然而,这似乎是解决这个问题的一个糟糕的方法,因为我将在许多页面上使用相同的条件,因此会有大量重复的代码

我在想,也许有一种更好的方法可以基于某个钩子(我找不到)进行身份验证。我希望我能做一些类似的事情:

# create array of URLs where login is required
$needLoginArr = array(url1, url2, url3, ...)

# If current requested URL is in above array, then redirect or show different view based on whether or not user is logged in
由于我计划在不同的插件中集成,所以在将来的每个页面上设置条件可能不太实际,所以使用URL进行身份验证会很有用

我可能错过了一些东西,所以如果有更好的方法,请告诉我


谢谢

您可以将页面ID列表添加到选项中:

$need_login = array(
    'page1',
    'page1/subpage',
    'page2',
    // and so forth
);
$need_login_ids = array();
foreach( $need_login as $p ) {
    $pg = get_page_by_path( $p );
    $need_login_ids[] = $pg->ID;
}
update_option( 'xyz_need_login', $need_login_ids );
然后,要检查您的页面是否在
$need\u login
组中:

add_filter( 'the_content', 'so20221037_authenticate' );
function so20221037_authenticate( $content ) {
    global $post;
    $need_login_ids = get_option( 'xyz_need_login' );
    if( is_array( $need_login_ids ) && in_array( $post->ID, $need_login_ids ) ) {
        if( is_user_logged_in() ) {
            // alter the content as needs
            $content = 'Stuff for logged-in users' . $content;
        }
    }
    return $content;
}
工具书类

非常感谢您的回复,帕特。我认为这个解决方案的问题在于我使用了各种页面模板,其中包括我需要保护的代码。因此,内容之外(但页面模板内)的所有内容仍然可用。