2014-11-04 95 views
0

當激活WooCommerce時,插件會生成一些負責輸出商店功能的頁面。這一切都很好,除非我有幾次客戶或代表他的人刪除了這些頁面。無論如何,它們看起來都像空白頁如何隱藏或阻止WooCommerce生成的頁面?

有什麼辦法可以防止這種情況發生,也許可以通過從顧客(店鋪經理角色)隱藏他們或阻止他們進一步版本?

回答

1

這是將自動收集由Woocommerce產生的頁面的ID的溶液。該插件在安裝時會創建四個頁面(商店,購物車,結帳,我的帳戶),並將該頁面的ID保存在wp_options表內的數據庫中。選項名稱:

  • woocommerce_shop_page_id
  • woocommerce_cart_page_id
  • woocommerce_checkout_page_id
  • woocommerce_myaccount_page_id

此示例收集的ID中pre_get_posts行動(即執行的實際查詢之前運行)自動,如果當前用戶不是administrator WC生成的頁面將不會被檢索。

第二部分用於禁用admin bar中的edit page鏈接。因爲登錄的用戶仍然可以通過管理欄直接訪問頁面,所以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/

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和稍加修改,它已經過測試,應該工作

+0

非常感謝你的幫助嚎叫,由於某種原因,似乎沒有隱藏的頁面,通過頁面ID後切換到管理員權限不足的用戶。 我想我將不得不運行更多的測試,如果我得出任何結論,我會在這裏發佈。 – 2014-11-05 08:35:48

+0

剛剛通過您提到的原始博客版本進行了測試,並且與該版本一起使用。不知道你的版本出了什麼問題。 – 2014-11-05 08:40:45

+0

嗯唯一的區別是,他們使用編輯器和頁面ID 5,我用管理員和頁面ID 53 – Howli 2014-11-05 09:48:54