如何WooCommerce产品详情页面添加“最近浏览”功能

本教程将指导您如何通过一段简单的代码,在您的WooCommerce产品详情页下方,添加一个“最近浏览过的产品”模块。这个功能可以有效提升用户体验,并增加产品的曝光和交叉销售机会。

如何WooCommerce产品详情页面添加“最近浏览”功能

视频教程

操作步骤

准备工作

  1. 网站备份:在进行任何代码修改前,请务必备份您的网站。
  2. 子主题 (Child Theme):为了确保您的修改在主题更新后不会丢失,强烈建议您安装并激活一个子主题。接下来的所有代码都应该添加到子主题的文件中。

第一步:添加核心功能代码 (PHP)

  • 登录您的WordPress后台。
  • 导航到 外观 (Appearance) > 主题文件编辑器 (Theme File Editor)
  • 在右上角的“要编辑的主题”下拉菜单中,确保您选择的是您的 子主题 (Child Theme)
  • 在右侧的“主题文件”列表中,点击打开 functions.php 文件。
  • 将下面完整的PHP代码复制并粘贴到 functions.php 文件的末尾。
  • 最后点击更新文件。
/**
 * =================================================================
 * Part 1: 跟踪并记录用户最近浏览过的产品
 * =================================================================
 */
add_action( 'template_redirect', 'b2w_track_product_view' );
function b2w_track_product_view() {
    // 确保只在单个产品页面执行
    if ( ! is_singular('product') ) {
        return;
    }

    global $post;
    $product_id = $post->ID;

    // 从 Cookie 中获取已有的浏览记录
    $cookie_name = 'woocommerce_recently_viewed';
    $viewed_products = isset($_COOKIE[$cookie_name]) ? (array) explode('|', $_COOKIE[$cookie_name]) : array();

    // 如果当前产品已在记录中,先移除它(为了之后把它放到最前面)
    if ( ( $key = array_search($product_id, $viewed_products) ) !== false ) {
        unset($viewed_products[$key]);
    }

    // 将当前产品ID添加到数组的最前面
    array_unshift($viewed_products, $product_id);

    // 限制记录的产品数量,比如最多12个
    $viewed_products = array_slice($viewed_products, 0, 12);

    // 将更新后的数组存回 Cookie,有效期30天
    $cookie_value = implode('|', $viewed_products);
    $cookie_expire = time() + (60 * 60 * 24 * 30); // 30 days
    wc_setcookie($cookie_name, $cookie_value, $cookie_expire, true);
}


/**
 * =================================================================
 * Part 2: 使用 WooCommerce Shortcode 在页面上显示产品
 * (这是最稳定、兼容性最好的方法)
 * =================================================================
 */
add_action( 'woocommerce_after_single_product_summary', 'b2w_display_recently_viewed_products_shortcode', 15 );
function b2w_display_recently_viewed_products_shortcode() {
    // 从 Cookie 中获取浏览记录
    $viewed_products_ids = ! empty( $_COOKIE['woocommerce_recently_viewed'] ) ? explode( '|', $_COOKIE['woocommerce_recently_viewed'] ) : array();
    $viewed_products_ids = array_filter( array_map( 'absint', $viewed_products_ids ) );
    
    // 排除当前正在查看的产品
    $current_product_id = get_the_ID();
    if ( ( $key = array_search( $current_product_id, $viewed_products_ids ) ) !== false ) {
        unset( $viewed_products_ids[$key] );
    }

    // 如果排除后没有其他产品了,则不显示任何内容
    if ( empty( $viewed_products_ids ) ) {
        return;
    }

    // 将产品ID数组转换为用逗号分隔的字符串
    $ids_string = implode( ',', $viewed_products_ids );

    // --- 您可以在这里自定义 ---
    $title = 'Recently Viewed'; // 模块标题
    $columns = 4;                 // 每行显示的产品数量
    // -----------------------

    // 构建 WooCommerce 内置的 [products] 短代码
    $shortcode_string = '[products ids="' . $ids_string . '" columns="' . $columns . '" orderby="post__in"]';

    // 输出整个模块的HTML结构
    // 'is-width-constrained' 是 Blocksy 主题中用于限制内容宽度的关键类
    echo '<section class="b2w-recently-viewed is-width-constrained">';
    echo '  <h2 class="b2w-title">' . esc_html( $title ) . '</h2>';
    echo    do_shortcode( $shortcode_string ); // WordPress 执行并输出短代码的结果
    echo '</section>';
}

第二步:添加样式代码 (CSS)

这段CSS代码用于美化我们的模块标题,并确保它有合适的边距。

  1. 在WordPress后台,导航到 外观 (Appearance) > 自定义 (Customize)
  2. 在自定义菜单中,找到并点击 额外 CSS (Additional CSS)
  3. 将下面的CSS代码复制并粘贴到文本框中。
  4. 点击 “发布” (Publish) 保存。
/* --- Recently Viewed Products - Final V7 Fix --- */

.b2w-recently-viewed {
    margin-top: 40px;
    margin-bottom: 40px;
    clear: both;
    width: 100%;
}

.b2w-recently-viewed .b2w-title {
    text-align: center !important;
    margin-bottom: 24px !important;
}

然后到网站多浏览几个产品,查看在产品详情的下方是否出现了Recently View Products。

© 文章版权归白小菌所有,🫰欢迎转发分享。未经允许请勿抄袭转载。

白小菌
白小菌

嗨,我是白小菌,一个热爱学习并分享的博主。喜欢把复杂内容拆解成简单易懂的步骤,与大家一起学习成长。 在这里,你会看到我分享的外贸,跨境电商,Wordpress建站,SEO、有用的工具技巧等。 如果你有任何疑问或想法,可以在博客任意文章下方留言。如果有更复杂的需求,也可以选择付费咨询,我会尽我所能帮你解决问题。

文章: 452

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注