向任何以其 slug 结尾的 URL 提供页面
Serving a page to any URL that ends in its slug
还是 WordPress 的新手,所以请放轻松。
目标:
防止特定角色的用户查看由相同角色的用户创建的其他自定义 post 类型。
预期解决方案:
修改 URL 并在用户 ID 与 post 作者不匹配时重定向到自定义 403 页面。因此,如果试图查看 example.com/%taxonomy%/%private-post-slug% 的人将被重定向到 example.com/%分类学%/403
当前重定向代码:
<?php
add_action( 'template_redirect', 'private_posts_redirect');
function private_posts_redirect() {
$user = wp_get_current_user();
$post = get_post();
$author = $post->post_author;
if( get_post_type() == 'custom-post-type'){
if(!$user->ID == $author || !$user->ID == 1){
$intendedtarget = $_SERVER['REQUEST_URI'];
$intendedtargetpath = parse_url( $intendedtarget, PHP_URL_PATH );
$intendedtargetslug = pathinfo( $intendedtargetpath, PATHINFO_BASENAME );
$redirectslug = '403';
$redirecturl = str_replace( $intendedtargetslug, $redirectslug, $intendedtarget);
wp_redirect($redirect_url);
exit;
}
}
}
当前问题:
我创建了一个以“403”作为 slug 的 403 页面,我只是不确定如何在以该 slug 结尾的任何页面上提供该模板页面的内容。
暂定方案:
add_action('init' '403_page')
function 403_page(){
if(stristr($_SERVER['REQUEST_URI'],'403')){
DO_SOMETHING
}
}
我知道这只针对 post 作者,我已经为不属于我要隔离 post 的角色的用户提供了重定向。此外,我使用 Advanced Post Queries 插件只为作者提供他们的 posts,但这并不能阻止他们通过在 [=] 中输入随机数来查看其他 posts 54=] 并查看该用户独有的敏感 RFQ、报价和定价信息。
不确定这是否是唯一的问题,但这一行:
if(!$user->ID == $author || !$user->ID == 1){
应该是:
if($user->ID !== $author || $user->ID !== 1){
为了防止用户查看任何 he/she 不是作者的 post 文章,您应该首先获取 post 作者 ID,您可以获取作者 ID post 通过将以下几行添加到当前主题的 single.php 文件中:
global $post,$current_user;
$author_id = $post->post_author;
if($current_user->ID != $author_id && !current_user_can('administrator')){
// Do whatever you want to do here
exit;
}
注意:
前面的代码检查用户是否不是管理员,也不是当前 post 的作者,您可以使用 wp_safe_redirect() 或 PHP header() 函数将他们重定向到其他任何地方.
谢谢!
还是 WordPress 的新手,所以请放轻松。
目标:
防止特定角色的用户查看由相同角色的用户创建的其他自定义 post 类型。
预期解决方案:
修改 URL 并在用户 ID 与 post 作者不匹配时重定向到自定义 403 页面。因此,如果试图查看 example.com/%taxonomy%/%private-post-slug% 的人将被重定向到 example.com/%分类学%/403
当前重定向代码:
<?php
add_action( 'template_redirect', 'private_posts_redirect');
function private_posts_redirect() {
$user = wp_get_current_user();
$post = get_post();
$author = $post->post_author;
if( get_post_type() == 'custom-post-type'){
if(!$user->ID == $author || !$user->ID == 1){
$intendedtarget = $_SERVER['REQUEST_URI'];
$intendedtargetpath = parse_url( $intendedtarget, PHP_URL_PATH );
$intendedtargetslug = pathinfo( $intendedtargetpath, PATHINFO_BASENAME );
$redirectslug = '403';
$redirecturl = str_replace( $intendedtargetslug, $redirectslug, $intendedtarget);
wp_redirect($redirect_url);
exit;
}
}
}
当前问题:
我创建了一个以“403”作为 slug 的 403 页面,我只是不确定如何在以该 slug 结尾的任何页面上提供该模板页面的内容。
暂定方案:
add_action('init' '403_page')
function 403_page(){
if(stristr($_SERVER['REQUEST_URI'],'403')){
DO_SOMETHING
}
}
我知道这只针对 post 作者,我已经为不属于我要隔离 post 的角色的用户提供了重定向。此外,我使用 Advanced Post Queries 插件只为作者提供他们的 posts,但这并不能阻止他们通过在 [=] 中输入随机数来查看其他 posts 54=] 并查看该用户独有的敏感 RFQ、报价和定价信息。
不确定这是否是唯一的问题,但这一行:
if(!$user->ID == $author || !$user->ID == 1){
应该是:
if($user->ID !== $author || $user->ID !== 1){
为了防止用户查看任何 he/she 不是作者的 post 文章,您应该首先获取 post 作者 ID,您可以获取作者 ID post 通过将以下几行添加到当前主题的 single.php 文件中:
global $post,$current_user;
$author_id = $post->post_author;
if($current_user->ID != $author_id && !current_user_can('administrator')){
// Do whatever you want to do here
exit;
}
注意: 前面的代码检查用户是否不是管理员,也不是当前 post 的作者,您可以使用 wp_safe_redirect() 或 PHP header() 函数将他们重定向到其他任何地方.
谢谢!