我想在我的WordPress-WooCommerce网站上隐藏单个产品详细页面。我该如何做到这一点,而不破坏WooCommerce功能?
我想在我的WordPress-WooCommerce网站上隐藏单个产品详细页面。我该如何做到这一点,而不破坏WooCommerce功能?
您可以在商店页面上删除生成的锚点,该锚点永远不会将用户重定向到单个页面。为此,您需要将以下代码粘贴到您的functions.php文件中。
remove_action(
'woocommerce_before_shop_loop_item',
'woocommerce_template_loop_product_link_open',
10
);
这段代码将会移除链接,但是之后你还需要把锚点的闭合标签也一并移除,以免破坏你的HTML结构。
remove_action(
'woocommerce_after_shop_loop_item',
'woocommerce_template_loop_product_link_close',
5
);
把它放到 functions.php 中
//Removes links
add_filter( 'woocommerce_product_is_visible','product_invisible');
function product_invisible(){
return false;
}
//Remove single page
add_filter( 'woocommerce_register_post_type_product','hide_product_page',12,1);
function hide_product_page($args){
$args["publicly_queryable"]=false;
$args["public"]=false;
return $args;
}
您可以使用is_product()
助手函数注册一个钩子,以便在产品页面的情况下返回404
function prevent_access_to_product_page(){
global $post;
if ( is_product() ) {
global $wp_query;
$wp_query->set_404();
status_header(404);
}
}
add_action('wp','prevent_access_to_product_page');
解决方案经过测试并且可行。
注意:该解决方案在某种程度上基于@ale的答案中的一些信息。
单页面是 WordPress 提供的一种功能,无法禁用。但是有一些方法可以防止访问单个产品页面。
第一种方法是编辑您的商店(产品存档)模板,并删除所有链接到单个页面的位置。
第二种方法是在每次页面加载时检查页面是否为单个产品页面,并将用户重定向到您想要的任何位置:
add_action('init','prevent_access_to_product_page');
function prevent_access_to_product_page(){
if ( is_product() ) {
wp_redirect( site_url() );//will redirect to home page
}
}
您可以将此代码包含在子主题目录的functions.php文件中。请注意,我尚未测试过代码。
使用template_redirect
动作可能是一个好主意:
function redirect_if_single_product()
{
if (is_product()) {
wp_safe_redirect(esc_url(home_url()));
exit();
}
}
add_action('template_redirect', 'redirect_if_single_product');
.product-title a,
.product-container a,
.product-details a {
pointer-events: none;
}