如何隐藏或阻止WooCommerce生成的页面?

时间:2014-11-04 20:44:37

标签: wordpress woocommerce

当激活WooCommerce时,该插件会生成几个页面,负责输出商店功能。这一切都很好,除了我有几次客户或他的人删除这个页面。无论如何,它们看起来像空页。

有什么方法可以防止这种情况发生,可能是将它们隐藏在客户(店铺经理角色)中或阻止它们进一步发布版本?

2 个答案:

答案 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/

相关问题