当激活WooCommerce时,该插件会生成几个页面,负责输出商店功能。这一切都很好,除了我有几次客户或他的人删除这个页面。无论如何,它们看起来像空页。
有什么方法可以防止这种情况发生,可能是将它们隐藏在客户(店铺经理角色)中或阻止它们进一步发布版本?
答案 0 :(得分:1)
将以下代码添加到functions.php文件中将隐藏除管理员以外的所有人的页面。
function exclude_pages_from_admin($query) {
if($query->is_admin) {
$caps = get_user_meta(get_current_user_id(), 'wp_capabilities', true);
$roles = array_keys((array)$caps);
if( ! in_array('administrator', $roles) ){
$ids = array('53'); // Enter Page ids to restrict here
$query->query_vars['post__not_in'] = $ids;
if( in_array(get_the_ID(), $ids) ) {
wp_redirect(admin_url());
}
}
}
return $query;
}
add_filter('parse_query', 'exclude_pages_from_admin',99);
在页面上仍会显示“编辑页面”选项,但尝试编辑它会导致用户被重定向到仪表板。
以上内容被发现here并略有修改,已经过测试并且应该可以正常工作
答案 1 :(得分:1)
这是一个自动收集Woocommerce生成的网页ID的解决方案。安装后的插件会创建四个页面(Shop,Cart,Checkout,My Account),并将这些页面的ID保存在wp_options
表中的数据库中。选项名称是:
woocommerce_shop_page_id
woocommerce_cart_page_id
woocommerce_checkout_page_id
woocommerce_myaccount_page_id
该示例在pre_get_posts
操作(在执行实际查询之前运行)中自动收集ID,如果当前用户不是administrator
WC,则不会检索生成的页面。
第二部分用于禁用edit page
中的admin bar
链接。由于登录用户仍然可以通过管理栏直接访问页面,因此wp_before_admin_bar_render
操作用于删除edit page
链接,当然仅适用于WC页面,与第一部分相同。
将其放在functions.php
中,或者如果您想要独立于主题的解决方案,请创建一个插件。
add_action( 'pre_get_posts', function( $query ) {
if ( !is_admin() || !$query->is_main_query() ) return;
global $pagenow, $post_type;
if ( $pagenow == 'edit.php' && $post_type == 'page' && !in_array( 'administrator', wp_get_current_user()->roles ) ) {
$exclude = array_map(
function( $item ) { return get_option( $item ); },
array( 'woocommerce_shop_page_id', 'woocommerce_cart_page_id', 'woocommerce_checkout_page_id', 'woocommerce_myaccount_page_id' )
);
$query->set( 'post__not_in', array_filter( $exclude ) );
}
});
add_action( 'wp_before_admin_bar_render', function() {
if ( is_admin() || !is_page() ) return;
global $wp_admin_bar;
$exclude = array_map(
function( $item ) { return get_option( $item ); },
array( 'woocommerce_shop_page_id', 'woocommerce_cart_page_id', 'woocommerce_checkout_page_id', 'woocommerce_myaccount_page_id' )
);
if ( in_array( get_queried_object()->ID, $exclude ) && !in_array( 'administrator', wp_get_current_user()->roles ) )
$wp_admin_bar->remove_menu( 'edit' );
});
以下是一些帮助我的链接:
http://www.johnparris.com/how-to-hide-pages-in-the-wordpress-admin/
http://wpsnipp.com/index.php/functions-php/exclude-pages-from-admin-edit-pages-list/