WordPress模板插件定制

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

WordPress愿望清单实现

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

  1. 咱们今天唠唠WordPress愿望清单咋整。这玩意儿说白了就是让用户能把自己喜欢的商品或者文章存起来,下次方便找。你想想啊,电商网站里那个“收藏”按钮,对,就那感觉!用WordPress搞这个,其实路子很多——可以用现成插件,也能自己手搓代码。我比较推荐自己写点代码,为啥?因为灵活啊,想加啥功能都行,不像插件有时候笨得要命。

  2. 先得琢磨数据结构。用户收藏的东西得存数据库吧?咱可以在wp_users表里加字段,但那样太乱。更好的法子是新建个表,比如叫wp_wishlist,里头放用户ID和商品ID。不过哈,实际开发中我更喜欢用WordPress的自定义表机制,用$wpdb操作,这样不乱动核心结构。来段代码示例看看:

global $wpdb;
$table_name = $wpdb->prefix . 'wishlist';
$charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE $table_name (
    id mediumint(9) NOT NULL AUTO_INCREMENT,
    user_id bigint(20) NOT NULL,
    post_id bigint(20) NOT NULL,
    date_added datetime DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
) $charset_collate;";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);

这段放functions.php里就行,激活主题时候会自动建表。注意啊,dbDelta函数对这SQL格式要求很龟毛,字段定义得换行还得有逗号,别写错!

  1. 用户界面咋弄?一般是在商品页加个按钮,点一下就能收藏。前端可以用Ajax,这样不用刷新页面。先写个按钮的HTML结构:
<button class="de94-800e-69c4-9129 wishlist-btn" data-post-id="<?php echo get_the_ID(); ?>">
    ♡ 加入愿望单
</button>

然后用jQuery处理点击事件。为啥用jQuery?因为WordPress自带这库,省得引入新东西。代码大概长这样:

jQuery(document).ready(function($) {
    $('.wishlist-btn').click(function() {
        var post_id = $(this).data('post-id');
        $.ajax({
            url: ajax_object.ajax_url,
            type: 'POST',
            data: {
                action: 'add_to_wishlist',
                post_id: post_id
            },
            success: function(response) {
                if(response == 'success') {
                    alert('加进去啦!');
                }
            }
        });
    });
});
  1. 后端得接住这Ajax请求对吧?在functions.php里挂个动作钩子:
add_action('wp_ajax_add_to_wishlist', 'add_to_wishlist_handler');
function add_to_wishlist_handler() {
    if (is_user_logged_in()) {
        global $wpdb;
        $user_id = get_current_user_id();
        $post_id = intval($_POST['post_id']);
        $table_name = $wpdb->prefix . 'wishlist';

        $wpdb->insert(
            $table_name,
            array(
                'user_id' => $user_id,
                'post_id' => $post_id
            ),
            array('%d', '%d')
        );
        echo 'success';
    } else {
        echo 'login_required';
    }
    wp_die();
}

记得哈,这代码只处理登录用户。要是想允许未登录用户收藏,得用cookie或者session,但那更复杂,今天先不说。

  1. 显示愿望清单页面可以用短码实现。新建个短码函数,比如叫[wishlist],然后循环输出用户收藏的内容:
add_shortcode('wishlist', 'display_wishlist');
function display_wishlist() {
    if (!is_user_logged_in()) return '请先登录!';

    global $wpdb;
    $user_id = get_current_user_id();
    $table_name = $wpdb->prefix . 'wishlist';
    $items = $wpdb->get_results(
        "SELECT post_id FROM $table_name WHERE user_id = $user_id"
    );

    $output = '<ul class="f5aa-01c4-0293-8ad9 wishlist-items">';
    foreach ($items as $item) {
        $post_title = get_the_title($item->post_id);
        $output .= "<li><a href='" . get_permalink($item->post_id) . "'>$post_title</a></li>";
    }
    $output .= '</ul>';
    return $output;
}

短码随便插到页面或文章里都行,WordPress会自动替换成清单列表。

  1. 性能问题得考虑。如果用户收藏了几千条东西,每次查数据库可能慢。这时候可以用缓存,比如用transient API存结果:
$wishlist = get_transient('wishlist_' . $user_id);
if (false === $wishlist) {
    $wishlist = $wpdb->get_results("SELECT ..."); // 数据库查询
    set_transient('wishlist_' . $user_id, $wishlist, HOUR_IN_SECONDS);
}

这样一小时內重复访问就不用查数据库了。不过记得用户新增或删除收藏时,得用delete_transient清掉缓存,不然显示不对。

  1. 最后唠点细节。比如要不要防止重复收藏?可以在数据库里加UNIQUE索引,或者插入前先检查是否存在。还有安全性,前面代码里用了intval过滤post_id,避免SQL注入。另外权限检查也很重要——别让用户能删别人的收藏啊!

总之啊,愿望清单看似简单,实际涉及前后端交互、数据库设计、用户体验,挺锻炼人的。用WordPress自己实现的话,既学插件开发思路,又加深对核心API的理解。要是懒得折腾,就用WooCommerce的官方扩展或者YITH Wishlist插件,但自己写的代码就像亲手捏的泥人,再丑也是宝贝对吧?

Tags:

WordPress模板插件定制

WP集市

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