WordPress模板插件定制

您现在的位置是:首页 > WordPress教程WordPress教程

WordPress购物车添加

查看 WP集市 的更多文章WP集市 2025-09-09 【WordPress教程】 947人已围观

  1. 好的,咱们直接开始。WordPress这玩意儿搞购物车,其实路子挺多的。最省心的办法?装个WooCommerce插件呗。但今天不说这个,说点手搓的,虽然可能有点绕,但有意思啊。你想想,有时候客户就想要个简单的“加入购物车”按钮,不想搞整个电商系统,太重了。行,那就自己来。

  2. 首先,你得在主题里动手脚。打开你的主题文件夹,找到 functions.php 文件。别怕,就是它。在这里,我们得先定义一下“商品”是啥。WordPress里,其实任何文章类型都能当商品,但为了简单,我们就用文章吧。来,加段代码:

// 在functions.php里添加自定义字段,用于商品价格
function add_price_meta_box() {
    add_meta_box( 'product_price', '商品价格', 'price_meta_box_callback', 'post' );
}
add_action( 'add_meta_boxes', 'add_price_meta_box' );

function price_meta_box_callback( $post ) {
    $price = get_post_meta( $post->ID, '_product_price', true );
    echo '<input type="number" name="product_price" value="' . esc_attr( $price ) . '" step="0.01" />';
}

function save_price_meta( $post_id ) {
    if ( isset( $_POST['product_price'] ) ) {
        update_post_meta( $post_id, '_product_price', sanitize_text_field( $_POST['product_price'] ) );
    }
}
add_action( 'save_post', 'save_price_meta' );

这段代码干嘛用?它给文章编辑页面加了个框,让你输入价格。保存后,价格就存到自定义字段里了。简单吧?但这就是基础。

  1. 接下来,得让用户能点“加入购物车”。你可以在文章模板里(比如 single.php)加个按钮。但更灵活的办法是用钩子,比如在内容后面自动添加。再来一段:
// 在文章内容后显示加入购物车按钮
function add_to_cart_button_after_content( $content ) {
    if ( is_single() && in_the_loop() ) {
        $price = get_post_meta( get_the_ID(), '_product_price', true );
        if ( ! empty( $price ) ) {
            $button = '<form action="" method="post">';
            $button .= '<input type="hidden" name="product_id" value="' . get_the_ID() . '">';
            $button .= '<input type="submit" name="add_to_cart" value="加入购物车" style="padding:10px; background:#0073aa; color:white; border:none; cursor:pointer;">';
            $button .= '</form>';
            $content .= $button;
        }
    }
    return $content;
}
add_filter( 'the_content', 'add_to_cart_button_after_content' );

这代码会在每篇文章底部加个表单,点按钮就提交。但注意,这里用了空action,意思是提交到当前页面。你得自己处理提交逻辑。

  1. 处理提交?对,就是当用户点按钮时,咱们得把商品ID存起来。存哪儿?Session呗。但WordPress默认不用Session,所以得先启动它。在functions.php开头加:
// 启动Session
function start_session() {
    if ( ! session_id() ) {
        session_start();
    }
}
add_action( 'init', 'start_session', 1 );

然后,处理那个表单提交:

// 处理加入购物车操作
function handle_add_to_cart() {
    if ( isset( $_POST['add_to_cart'] ) && isset( $_POST['product_id'] ) ) {
        $product_id = intval( $_POST['product_id'] );
        if ( ! isset( $_SESSION['cart'] ) ) {
            $_SESSION['cart'] = array();
        }
        if ( isset( $_SESSION['cart'][ $product_id ] ) ) {
            $_SESSION['cart'][ $product_id ] += 1;
        } else {
            $_SESSION['cart'][ $product_id ] = 1;
        }
        // 可以加个提示消息
        wp_redirect( get_permalink( $product_id ) );
        exit;
    }
}
add_action( 'template_redirect', 'handle_add_to_cart' );

这段代码检查是否有提交,有就把商品ID塞进Session的cart数组里。如果已有就数量加一,没有就设为一。然后跳转回商品页面。

  1. 购物车有了,总得显示吧?做个购物车页面。先创建个页面模板,比如 page-cart.php。在里面循环输出Session中的商品:
// 在page-cart.php中部分代码
if ( isset( $_SESSION['cart'] ) && ! empty( $_SESSION['cart'] ) ) {
    foreach ( $_SESSION['cart'] as $product_id => $quantity ) {
        $product = get_post( $product_id );
        $price = get_post_meta( $product_id, '_product_price', true );
        echo '<p>' . esc_html( $product->post_title ) . ' - 数量: ' . $quantity . ' - 单价: ' . $price . '</p>';
    }
} else {
    echo '<p>购物车为空</p>';
}

这就能列出商品名、数量和单价了。当然,还能加总价计算,但你自己琢磨吧。

  1. 最后,别忘了清理购物车。加个清空按钮或类似功能。比如在购物车页面加个表单:
<form action="" method="post">
    <input type="submit" name="empty_cart" value="清空购物车">
</form>

然后处理:

// 处理清空购物车
function handle_empty_cart() {
    if ( isset( $_POST['empty_cart'] ) ) {
        unset( $_SESSION['cart'] );
        wp_redirect( home_url( '/cart/' ) ); // 假设购物车页面slug是cart
        exit;
    }
}
add_action( 'template_redirect', 'handle_empty_cart' );
  1. 瞧,一个简陋但可用的购物车就成了。当然,这只是思路,真要用还得考虑好多:安全性(防CSRF、XSS)、用户体验、支付集成等等。但WordPress就这好处,灵活。你想简单就用插件,想折腾就自己码。代码嘛,总是越写越明白,即使有点病句似的逻辑,跑起来就行。

Tags:

WordPress模板插件定制

WP集市

V管理员
文章 723 篇 | 评论 0 次
最新文章