我制作了一个插件,在某些情况下,我需要为GravityView中的订阅者角色添加一些功能。
我想用user_has_cap
过滤以使其工作does 只是没有在正确的时间添加大写字母,所以GravityView认为用户没有正确的大写字母。
我在插件中包含了一个文件,就是这段代码,(删掉了一些注释等)
add_filter( \'user_has_cap\', \'sqms_user_has_cap_filter\' );
function sqms_user_has_cap_filter( $allcaps, $caps, $args, $user ) {
// Only do this mess if the page being viewed is a dealer landing page
if ( ! is_singular( \'sqms_payne_dealer\' ) ) {
return $allcaps;
}
// This is meta from a dropdown of CPT that is added to user profield via CMB2
$dealer_slug = get_user_meta( get_current_user_id(), \'sqms-product-dealer-id\', true );
if ( $dealer_slug ) {
// This is the only (ugly ass) way I found to get the CPT ID via the page slug
$page_path = \'sqms_payne_dealer/\' . $dealer_slug;
$dealer_page = get_page_by_path( basename( untrailingslashit( $page_path ) ), OBJECT, \'sqms_payne_dealer\');
// Make sure the page being viewed belongs to the logged in dealer
if ( $dealer_page->ID === get_queried_object_id() ) {
$needed_caps = array( \'gravityforms_view_entry_notes\', \'gravityview_add_entry_notes\', \'gravityview_view_entry_notes\', \'gravityforms_edit_entry_notes\' );
foreach ( $needed_caps as $cap ) {
$allcaps[ $cap ] = true;
}
}
}
return $allcaps;
}
两个问题:
获取使用的错误is_singular()
这里是因为它显然在查询之前。。。
如果我删除了该支票,则在get_queried_object_id()
说它是空的。
我不知道如何继续,正在这里寻找任何输入。如果不是很明显,我想only 为当前登录的用户提供上限if 他们正在查看我通过user\\u meta分配给他们的单一页面。
非常感谢。