首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WP -通过save_post钩子使用metabox值更改usermeta值

在WordPress(WP)中,save_post 钩子是一个非常有用的工具,它允许你在保存帖子时执行自定义代码。结合自定义元框(metabox),你可以创建动态的用户元数据(usermeta),从而增强网站的功能性和个性化。

基础概念

Metabox:WordPress中的一个功能,允许你在编辑帖子的侧边栏添加额外的字段和选项。

Usermeta:存储在wp_usermeta表中的用户相关数据,可以用来存储用户的额外信息。

save_post 钩子:当一个帖子被创建或更新时触发的动作钩子。

相关优势

  • 灵活性:通过自定义元框和用户元数据,可以为每个用户提供定制化的体验。
  • 扩展性:易于添加新的字段和逻辑,无需修改核心WordPress文件。
  • 用户友好:允许管理员在编辑帖子时直接设置相关用户元数据。

类型与应用场景

  • 类型:通常涉及文本框、选择框、复选框等多种输入类型。
  • 应用场景:例如,为作者设置特定的角色权限、记录用户的偏好设置、或者跟踪用户的特定活动等。

示例代码

以下是一个简单的示例,展示了如何使用save_post钩子和自定义元框来更改用户元数据:

代码语言:txt
复制
// 添加自定义元框
function my_custom_metabox() {
    add_meta_box('my_metabox_id', 'My Custom Metabox', 'my_metabox_callback', 'post', 'side');
}
add_action('add_meta_boxes', 'my_custom_metabox');

// 元框回调函数
function my_metabox_callback($post) {
    // 获取当前帖子的作者ID
    $author_id = get_post_field('post_author', $post->ID);
    
    // 获取并显示当前的用户元数据值
    $user_meta_value = get_user_meta($author_id, 'my_custom_user_meta', true);
    
    // 输出表单字段
    echo '<label for="my_custom_user_meta">Custom User Meta:</label>';
    echo '<input type="text" id="my_custom_user_meta" name="my_custom_user_meta" value="' . esc_attr($user_meta_value) . '">';
}

// 使用save_post钩子保存数据
function save_custom_metabox_data($post_id) {
    // 检查是否来自自定义元框的表单提交
    if (isset($_POST['my_custom_user_meta'])) {
        // 获取当前帖子的作者ID
        $author_id = get_post_field('post_author', $post_id);
        
        // 更新用户元数据
        update_user_meta($author_id, 'my_custom_user_meta', sanitize_text_field($_POST['my_custom_user_meta']));
    }
}
add_action('save_post', 'save_custom_metabox_data');

可能遇到的问题及解决方法

问题:用户元数据没有更新。

原因:可能是由于表单字段名称不匹配,或者save_post钩子中的逻辑没有正确执行。

解决方法

  1. 确保表单字段的name属性与你在save_post钩子中检查的变量名一致。
  2. save_post钩子中添加调试信息,比如使用error_log()来检查是否触发了该钩子以及传递的数据是否正确。

问题:元框显示在错误的帖子类型上。

原因:可能是由于add_meta_box函数中指定的帖子类型不正确。

解决方法:检查add_meta_box函数调用中的第四个参数,确保它与你希望显示元框的帖子类型相匹配。

通过以上步骤,你可以有效地使用WordPress的save_post钩子和自定义元框来管理和更新用户元数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WP数据库表前缀修改教程

其实为了我们的WP网站更安全,在安装WordPress之前其实就应该将默认的数据库表前缀wp_更改掉,但往往最开始我们都没注意到这个细节问题,那么如果网站装好以后想更改WordPress数据库表前缀应该如何操作呢...'; 更改为: $table_prefix = 'wpkl_'; 3、更改wp_options表 表wp_options( 新表为wpkl_options)里面的option_name字段值要改掉 update... wpkl_options set option_name = replace(option_name,'wp_','wpkl_'); 4、更改wp_usermeta表 表wp_usermeta( 新表为...wpkl_usermeta)里面的meta_key字段值要改掉 update wpkl_usermeta set meta_key = replace(meta_key,'wp_',wpkl_'); 方法二...mysql数据库里面的数据库前缀; 2、更改网站根目录下wp-config.php文件里面的表前缀; 3、更改表wp-options里面的表前缀; 4、更改表wp-usermeta里面的表前缀; 打开插件后

1.7K20
  • 如何在WordPress网站之间共享用户和登录

    修改wordpress配置 为实现共用用户数据,我们必须让两个站使用的数据表都为a_user与a_usermeta。...或者都使用b_user与b_usermeta,我这里使用的A作为主站,所以我需要把B站使用的b_user与b_usermeta数据表改为使用a_user与a_usermeta数据表。...通过上面的mysql命令,插入用户对B站点的权限后,我们就可以正常访问B站的后台了。注意:记得清理cookies!...如果不会MySQL,你也可以使用phpmyadmin使用鼠标点击a_usermeta数据表中meta_key值为a_capabilities记录项前面的复制链接,phpmyadmin会自动跳转到插入功能并填入相应值...main_prefix = 'a_'; //设置子站的前缀,例如有两个子站,前缀分别为wpen_和wpcn_ $addi_prefixs = array('b_','c_'); //添加功能到用户注册的钩子里

    1.9K10

    Wordpress按评论时间给文章排序

    但是有的网友使用wp作为论坛,就需要新的排序方式。比如按最新评论排序。...原理:给每篇文章添加一个自定义字段_commentTime(这个字段的值为最新一条评论的时间)然后使用query_posts函数实现所有文章按照自定义字段_commentTime的值进行排序 具体操作:...sql语句 将下列SQL语句添加到phpmyadmin面板中SQL输入框中并执行2.使用sql语句将下列SQL语句添加到phpmyadmin面板中SQL输入框中并执行 insert into wp_postmeta....在主题functions.php文件中添加相应action代码这一步添加的代码可以实现发布新文章(或新更改)、有新评论的时候,自动添加/更新自定义字段_commentTime的值,不需要你手动添加更改...wp_is_post_revision($post_ID)) { delete_post_meta($post_ID, '_commentTime'); }}add_action('save_post

    73230

    WordPress 主题和插件的加载运行机制、Hook钩子与重要函数

    本文有助于你深度了解 WordPress 主题和插件的 PHP 加载顺序,学习 Hook(钩子)Action(动作钩子) Filters(过滤钩子)的概念,弄懂 WordPress 重要函数:do_action...我们使用时这个文件是存在的,所以执行的是下方的 require_once( ABSPATH . 'wp-config.php' );命令。 接下来看看 wp-config.php 这个文件。...举个例子,我希望了解 save_post 这个 Hook 的参数,可以到它的 API 页面去查看具体的参数调用。可以看到在示例代码中说明了参数的个数和对应的参数的含义。...了解到参数后,就可以使用这些参数,来执行一系列操作了。 虽然你可能查到了有三个参数,可以不使用三个参数,比如只使用前两个。...,所以它和 do_action 不同之处就在于它需要一个返回值。

    1.4K10

    WordPress 函数:get_post() 获取指定 ID 文章相关信息

    wordpress主题制作中可能需要单独调用指定文章的标题、链接或内容等,可以通过get_post()函数指定文章ID来获取文章标题、文章内容、文章链接、时间等文章相关信息。...默认值为空。 $output:需要返回的参数,可选参数。...所以定义文章的分类可使用get_the_category()函数]) post_excerpt(文章摘要) post_status(文章状态包括已发布,准备发布,草稿,私人文章等等) comment_status...,可以查到动作钩子的函数参数和个数 动作钩子: publish_post:参数一个($post_ID),点击发布文章时就会被触发,仅含已发布;(推荐) save_post:参数一个($post_ID)...类似内核函数 wp_update_post()

    72530

    WordPress Rank Math SEO插件任意元数据修改复现

    3~4min 声明:请勿用作违法用途,否则后果自负 0x01 简介 Rank Math是一个WordPress插件,其开发人员称其为“WordPress (SEO)的瑞士军刀”,旨在帮助网站所有者通过搜索引擎优化...该插件随附一个安装向导,可通过逐步安装过程对其进行配置,并支持Google架构标记(又名Rich Rich Snippets)、关键字优化、Google Search Console集成,Google关键字排名跟踪等...注意: 更改为”文章名“后可能出现403,在生成了的.htaccess文件 里增加“Options +FollowSymLinks”这句内容即可(系统rewrite已开启的前提)。...0x05 漏洞复现 建立用户test,设置角色为订阅者 image.png 在数据库wordpress中的wp_usermeta表查看test和admin在数据库中字段的区别: •test:...参数很明显是user(根据其下面调用的update_metadata方法),meta参数是要修改的键值对,objectID对应数据库表中的user_id字段 作为一个攻击者,必然需要知道user_id的值

    1K20

    解决WordPress修改数据库表前缀后无法登陆的问题

    我先将其他 2 个前缀的所有空表全部删除,只留下那个前缀很长的表,然后全选使用下方的修改表前缀功能,全部给改了。...网上找到的方法如下(玛思阁稍作整理): ---- 默认的表前缀为 wp_,如果你修改了 wp_config.php 中的表前缀,也就是$table_prefix=后面的内容,则您需要同步修改数据库中的表前缀...解决办法:打开 *_options表,找到optionname字段值为*_user_roles的栏位,改为与你修改后的前缀(*表示实际前缀)。 ?...然后打开 *_usermeta 表,将meta-key字段中有旧前缀的值,更为新的前缀就 OK。 ? 不知道为啥,发现在他的这个表搜索后,发现有好几千条数据!...看来手动是行不通了,只好使用 SQL 语句进行局部替换了,SQL 语句如下,在 phpMyAdmin 中选定数据库后,点击工具条中的 SQL 执行如下语句: update `new_usermeta`

    2K60

    优化WordPress性能的高级指南

    这可能会导致不一致,特别是如果我们在代码中使用查询相关的过滤器,因为你在页面中不期望的帖子可能会被该函数返回。 使用WP_Query类 在我看来,这是从数据库中检索帖子的最佳方式。...为了实现这一点,我们使用posts_per_page参数。 WordPress允许我们将-1表示为该参数的合理值,在这种情况下,系统将尝试获取满足定义条件的所有帖子。...最后,我们将一个重型数据库查询(使用WP_Query元键)更改为简单直接的查询(调用get_post()),这是一个更好和更有效的方法。...所以,通过两个简单的更改,我们添加一个到期日期: // functions.php add_action( 'save_post', function ( $post_id ) { // Same comment...这是使用持久缓存最常见的陷阱。 如果我们不正确地解决这个问题,我们的用户会抱怨说他们看不到他们所做的更改,或者他们的更改需要太长时间才能应用。

    7.1K20

    WordPress 技巧:一个 WordPress 安装,多个博客

    这样才能使得所有博客使用同一个 WordPress 安装。 第二步要分两种情况: 第一种是使用不同的数据库。...只需要在 wp-config.php 文件的开头加入以下代码: $hostname = $_SERVER['HTTP_HOST']; switch ($hostname) { case "fairyfish.com...settings ** // define('DB_NAME', $db); // The name of the database 代码很简单就是根据不同的域名,给 DB_NAME 不同的数据库名的值。...对于这种情况,已经有一款插件他能帮助你完成所有的了工作,WP-Hive,这款插件除了能够给你不同的博客指定一个不同的 table_prefix 之外,还能够通过 rewriter 实现每个博客都能有自己的...实现方法是在 wp-config.php 文件中指定 CUSTOM_USER_TABLE 和 CUSTOM_USER_META_TABLE 这两个值为常量,使得所有的博客都是用同一个 USER 和 USERMETA

    34630

    WP常用SQL总结

    先来看看每个表的功能吧 wp\_commentmeta:存储评论的元数据 wp\_comments:存储评论 wp\_links:存储友情链接(Blogroll) wp\_options:存储WordPress...wp\_term\_relationships:存储每个文章、链接和对应分类的关系 wp\_term\_taxonomy:存储每个目录、标签所对应的分类 wp\_usermeta:存储用户的元数据...wp_users:存储用户信息   删除残留垃圾数据 使用WordPress经常换主题删主题,装插件删插件很正常,但是简单的删除并不彻底,数据库会有残留,多余的数据保留在post_meta表格里,久而久之就成了一堆可观的垃圾...可使用下面的SQL语句来清除不需要的postmeta值。有益于加快数据库运行速度,减小数据。...处理未使用的标签 在WordPress数据库中,如果你使用一个查询语句手动来删除旧的文章,旧的标签却仍然会保留并在你的标签云/列表中出现。你可以使用下面的方法识别未使用的标签并将它删除。

    37630
    领券