lmartins
11/5/2014 - 8:10 PM

Hides WooCommerce genereted pages from non admin users

Hides WooCommerce genereted pages from non admin users

/**
 * Hides the WooCommere pages from non Administrators
 * See: http://stackoverflow.com/questions/26744680/how-to-hide-or-block-the-woocommerce-generated-pages/26765913#26765913
 */

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' );

});