WordPress中创建一个简单的CRM:创建自定义字段

在本系列中,我们一直在研究如何在 wordpress 中创建简单的 crm 系统。在本系列的第一部分中,我们创建了一个注册“联系人”自定义帖子类型的 wordpress 插件,但我们尚未介绍如何存储联系人的其他信息。

创建自定义字段

WordPress 具有 add_meta_box() 函数,该函数允许插件和主题开发人员针对各种 WordPress 管理屏幕注册自定义元框。

WordPress 会注册一些自己的元框,以便在您创建帖子或页面时显示。例如,在页面上,您有页面属性元框:

WordPress中创建一个简单的CRM:创建自定义字段

让我们向联系人自定义帖子类型添加一个元框。打开您在本系列第一篇教程中创建的插件文件。然后,在插件的构造函数中,更新代码以匹配以下内容。这将我们的 register_meta_boxes() 函数注册到 add_meta_boxes 操作:

/*** Constructor. Called when plugin is initialised*/function __construct() {add_action( 'init', array( $this, 'register_custom_post_type' ) );add_action( 'add_meta_boxes', array( $this, 'register_meta_boxes' ) );     }

接下来,在我们的 register_meta_boxes() 函数中,我们添加对 add_meta_box() 的调用。这告诉 WordPress 我们需要一个名为 Contact Details 的元框,它由 output_meta_box() 函数呈现。在构造函数后添加以下代码:

/*** Registers a Meta Box on our Contact Custom Post Type, called 'Contact Details'*/function register_meta_boxes() {add_meta_box( 'contact-details', 'Contact Details', array( $this, 'output_meta_box' ), 'contact', 'normal', 'high' );}

最后,我们需要一个output_meta_box()函数,该函数是由上面的add_meta_box调用的。在register_meta_boxes()函数后添加以下代码:

/*** Output a Contact Details meta box** @param WP_Post $post WordPress Post object*/function output_meta_box($post) {}

让我们检查一下我们的联系人自定义帖子类型上是否出现了一个元框。转至联系人 > 添加新联系人

,在 WordPress 仪表板中创建新联系人。

如果所有内容都正确编写,您应该会看到类似于以下屏幕截图的内容:

WordPress中创建一个简单的CRM:创建自定义字段

使用字段填充元框

让我们继续向此元框添加一个电子邮件地址字段。将 output_meta_box 函数更改为以下代码:

/*** Output a Contact Details meta box** @param WP_Post $post WordPress Post object*/function output_meta_box( $post ) {// Output label and field    echo ( ''  );echo ( ''  );    }

保存您的插件代码,然后重新加载“添加联系人”屏幕。您应该会看到我们的新电子邮件地址字段出现在“联系方式详细信息”元框中:

WordPress中创建一个简单的CRM:创建自定义字段

保存自定义字段数据

我们还没有完全完成。我们需要告诉 WordPress 保存用户在该字段中输入的内容。在 WordPress 中,我们通过针对 save_post 操作注册一个函数来实现此目的。

与大多数操作一样,我们将在插件的构造函数中注册我们的操作:

/*** Constructor. Called when plugin is initialised*/function __construct() {add_action( 'init', array( $this, 'register_custom_post_type' ) );add_action( 'add_meta_boxes', array( $this, 'register_meta_boxes' ) ); add_action( 'save_post', array( $this, 'save_meta_boxes' ) );    }

接下来,让我们创建 save_meta_boxes() 函数:

/*** Saves the meta box field data** @param int $post_id Post ID*/function save_meta_boxes( $post_id ) {// Check this is the Contact Custom Post Typeif ( 'contact' != $_POST['post_type'] ) {return $post_id;}// Check the logged in user has permission to edit this postif ( ! current_user_can( 'edit_post', $post_id ) ) {return $post_id;}// OK to save meta data$email = sanitize_text_field( $_POST['contact_email'] );update_post_meta( $post_id, '_contact_email', $email );    }

此函数执行多个操作,因为 WordPress 和其他插件可以非常频繁地调用 save_post 操作(例如,当定期自动保存草稿或保存不同的帖子类型时)。我们需要确保仅在用户保存或更新联系人时才保存自定义字段数据。

如果我们要保存联系人,我们会清理电子邮件地址。来自 WordPress 法典:

检查无效的 UTF-8,将单个

简而言之,我们确保文本字符串中没有任何时髦的格式。

最后,我们使用 update_post_meta 将电子邮件地址存储在帖子元数据中。将帖子元视为附加到帖子的一系列键/值对。您可以根据自己的喜好选择任意数量。在我们的示例中,我们根据键 _contact_email 存储自定义字段的值。

读取自定义字段数据

创建新的联系人并输入电子邮件地址。保存新的联系人,您会发现电子邮件地址没有出现在字段中:

WordPress中创建一个简单的CRM:创建自定义字段

我们需要编辑 output_meta_box() 函数来读取 Post 元,并将其显示在输入字段中。将 output_meta_box() 函数更改为以下代码:

/*** Output a Contact Details meta box** @param WP_Post $post WordPress Post object*/function output_meta_box($post) {$email = get_post_meta( $post->ID, '_contact_email', true );// Output label and field    echo ( '' );echo ( '' );    }

我们使用 get_post_meta() 来获取给定帖子 ID 和元键组合的值。我们知道元键是 _contact_email,因为这就是我们在 update_post_meta()

中保存自定义字段值时使用的键

安全

提交和处理表单数据时,安全性极其重要。我们在保存数据时需要知道数据的来源是可信的。如果我们不能信任数据的来源,我们就不能存储它——数据可能会因试图利用错误或安全缺陷而受到损害或损坏。

WordPress 为我们提供了随机数(“使用一次的数字”),可以与表单数据一起发送。当我们的保存例程运行时,可以检查这个随机数,以确保它与我们期望的值匹配。

这有助于防止跨站点请求伪造 (CSRF) 攻击,即有人试图从不同的网站向我们的保存例程提交表单数据。

我们需要在上面的代码的两个地方添加安全性:

output_meta_box():向表单添加随机数save_meta_boxes():验证提交的随机数值

让我们编辑 output_meta_box() 函数,将其替换为以下代码:

/*** Output a Contact Details meta box** @param WP_Post $post WordPress Post object*/function output_meta_box($post) {    $email = get_post_meta( $post->ID, '_contact_email', true );// Add a nonce field so we can check for it later.wp_nonce_field( 'save_contact', 'contacts_nonce' );// Output label and fieldecho ( '' );echo ( '' );    }

这使用 wp_nonce_field() 生成一个名为 contacts_nonce 的隐藏字段,并执行名为 save_contact 的操作。它的价值是由WordPress产生的。

接下来,让我们在 save_meta_boxes() 中编辑保存例程:

/*** Saves the meta box field data** @param int $post_id Post ID*/function save_meta_boxes( $post_id ) {// Check if our nonce is set.if ( ! isset( $_POST['contacts_nonce'] ) ) {return $post_id;}// Verify that the nonce is valid.if ( ! wp_verify_nonce( $_POST['contacts_nonce'], 'save_contact' ) ) {return $post_id;}// Check this is the Contact Custom Post Typeif ( 'contact' != $_POST['post_type'] ) {return $post_id;}// Check the logged in user has permission to edit this postif ( ! current_user_can( 'edit_post', $post_id ) ) {return $post_id;}// OK to save meta data$email = sanitize_text_field( $_POST['contact_email'] );update_post_meta( $post_id, '_contact_email', $email );    }

这为我们的保存例程添加了两项检查:

检查我们的表单中是否设置了随机数字段。如果没有,请不要保存任何内容。检查随机数字段的值是否符合我们的预期。如果没有,请不要保存任何内容。

创建或编辑您的联系人,并确保电子邮件地址现已保存。

下一个…

在下一篇文章中,我们将使用高级自定义字段将自定义字段添加到我们的联系人自定义帖子类型中,从而使我们能够创建具有更广泛输入类型的丰富用户界面.

以上就是WordPress中创建一个简单的CRM:创建自定义字段的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1551321.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 21:36:12
下一篇 2025年12月13日 06:29:17

相关推荐

  • 利用WordPress媒体上传工具添加和删除图片

    在本系列的上一篇文章中,我们开始使用 wordpress 媒体上传器的最新版本,以便更清楚地了解如何开始将其合并到我们的项目中。 使用这个新功能(嗯,是 3.5 以后的新功能)的困难之处在于它没有像其他功能那样有详细的文档记录。这显然让很多开发人员——尤其是初学者——对如何开始使用它感到摸不着头脑。…

    2025年12月21日
    000
  • WooCommerce页面特定元素隐藏指南:PHP与CSS条件判断

    本教程详细介绍了在WordPress WooCommerce网站中,如何根据页面类型(如产品页或结账页)条件性地隐藏Elementor创建的区块或页脚。文章提供了两种主要方法:利用WordPress和WooCommerce的PHP条件函数进行服务器端控制,以及通过CSS结合body类进行客户端样式隐…

    2025年12月21日
    000
  • WooCommerce特定页面元素条件隐藏指南

    本教程详细介绍了在woocommerce商品页和结算页有条件地隐藏特定区域(如elementor创建的页脚)的三种专业方法。我们将探讨通过修改主题模板使用`get_footer()`、利用php条件逻辑(`is_product()`、`is_checkout()`)包裹代码,以及通过css结合wor…

    2025年12月21日
    000
  • WordPress菜单链接目标:自定义为特定iframe的实现指南

    本教程详细介绍了如何在WordPress中将导航菜单项的链接目标从默认的`_blank`更改为指定的iframe名称。通过利用`nav_menu_link_attributes`过滤器,并结合`functions.php`中的PHP代码,您可以确保菜单链接在页面上存在的具名iframe中打开,从而实…

    2025年12月21日
    000
  • 在WordPress菜单中实现链接定向到指定iframe的教程

    本教程详细介绍了如何在wordpress中,通过自定义代码将菜单项链接的目标(target)属性设置为指定的iframe名称,而非默认的`_blank`。文章将指导您修改`functions.php`文件以应用`nav_menu_link_attributes`过滤器,并强调确保目标iframe在页…

    2025年12月21日
    000
  • WordPress菜单项链接目标自定义:在指定iframe中打开

    本教程详细指导如何在wordpress中自定义菜单项的链接目标属性,使其不再局限于`_blank`,而是能够将链接内容加载到页面上指定名称的`iframe`中。通过使用`nav_menu_link_attributes`过滤器,配合正确的`iframe` html结构,开发者可以实现更灵活的页面内容…

    2025年12月21日
    000
  • WordPress菜单项链接在指定iframe中打开的教程

    本教程详细介绍了如何在WordPress中,通过修改菜单项的链接目标(target)属性,使其内容在指定名称的iframe中打开。我们将利用`nav_menu_link_attributes`过滤器,结合自定义PHP代码和页面上的iframe元素,解决WordPress默认只支持`_blank`目标…

    2025年12月21日
    000
  • WordPress菜单链接自定义Iframe目标属性设置教程

    本教程详细指导如何在WordPress中通过编程方式,将导航菜单链接的目标属性(target)设置为指定的iframe名称。我们将利用`nav_menu_link_attributes`过滤器修改链接属性,并强调确保目标iframe已正确嵌入页面HTML的关键步骤,以实现菜单链接在特定iframe中…

    2025年12月21日
    000
  • 在WordPress中实现PWA服务工作者按条件注册的教程

    本教程旨在解决wordpress中按条件控制渐进式web应用(pwa)服务工作者注册的问题,特别是当需要根据用户登录状态等条件来决定是否启用pwa功能时。文章将详细介绍如何利用wordpress的`wp_dequeue_script()`函数和`wp_print_scripts`动作钩子,在不修改p…

    2025年12月21日
    000
  • WordPress中条件性阻止PWA Service Worker注册的教程

    本教程将指导您如何在wordpress环境中,通过php代码和`wp_dequeue_script()`函数,根据用户登录状态或其他自定义条件,服务器端阻止pwa service worker的注册脚本加载。这种方法避免了直接修改插件文件,确保未登录用户无法访问或下载pwa,从而实现对pwa分发的精…

    2025年12月21日
    000
  • WordPress中基于用户登录状态控制PWA Service Worker注册

    本文详细阐述了如何在WordPress环境中,通过PHP代码动态控制PWA Service Worker的注册,以实现基于用户登录状态的条件性PWA部署。核心方法是利用WordPress的wp_dequeue_script()函数,在特定条件下阻止PWA注册脚本加载,从而确保只有已登录用户才能下载和…

    2025年12月21日
    000
  • 在WooCommerce感谢页嵌入订单详情并传递给JavaScript

    本教程旨在详细指导如何在woocommerce的“感谢页”中安全有效地获取订单详情,并将其动态嵌入到javascript代码中,以便将数据发送至第三方营销或分析系统。文章将重点介绍使用wordpress动作钩子`wp_footer`的正确方法,并提供处理单个或多个订单商品的代码示例,确保数据准确无误…

    2025年12月21日
    000
  • WordPress中JavaScript在动态内容加载后不执行的解决方案

    本文旨在解决wordpress网站中javascript代码不执行的问题,特别是当页面包含动态加载内容(如使用页面构建器或表单插件)时。核心问题在于javascript的加载时机与dom元素的存在时间不匹配。文章将详细解释`jquery(document).ready()`与`jquery(wind…

    2025年12月21日
    000
  • 在WooCommerce感谢页嵌入JavaScript并获取订单详情的专业指南

    本教程旨在指导用户如何在woocommerce感谢页面中,利用wordpress的动作钩子(如`wp_footer`),安全有效地获取订单详情,并将其动态注入到javascript跟踪脚本中。通过php代码获取订单id、总金额、商品id和名称等信息,并将其格式化后传递给外部营销或分析系统,确保数据传…

    2025年12月21日
    000
  • WordPress自定义表单JavaScript验证失效问题排查与解决

    本文旨在解决wordpress网站中使用oxygen builder和forminator构建自定义表单时,javascript验证脚本无法正常执行的问题。通过分析脚本加载时机和页面元素生成方式,提供两种解决方案:使用`jquery(window).load()`确保脚本在页面完全加载后执行,以及将…

    2025年12月21日
    000
  • 动态样式:使用jQuery管理元素选中状态与样式切换

    本文详细探讨了如何利用jquery和css动态管理网页元素的选中状态及其样式。通过介绍css的`:focus`伪类和jquery的类切换机制,文章提供了两种实现方案,旨在帮助开发者在交互式界面中,如轮播图或导航菜单,高效地为选定元素应用独特样式,同时保持代码的清晰与可维护性。 在网页开发中,经常需要…

    2025年12月21日
    000
  • 利用jQuery和CSS动态管理元素选中状态的教程

    本教程详细介绍了如何使用jQuery和CSS来动态改变一组具有相同类名的元素的样式,以实现选中状态的视觉反馈。文章提供了两种实现方案:一是利用CSS的`:focus`伪类,二是推荐使用jQuery结合CSS类进行切换,通过移除旧的选中类并添加新的选中类,从而高效管理元素的选中与非选中状态,确保用户界…

    2025年12月21日
    000
  • Gravity Forms:解决隐藏必填字段导致的提交问题

    本文旨在解决在使用 Gravity Forms 时,通过 JavaScript 隐藏必填字段可能导致的表单提交问题。核心在于理解 JavaScript 隐藏字段并不改变其必填属性,因此需要通过 PHP 代码进行自定义验证,以确保表单在特定条件下能够成功提交。本文将提供两种基于 PHP 的解决方案:一…

    2025年12月20日
    000
  • Nuxt3 Apollo 多认证头管理:实现会话与JWT共存的策略

    本文深入探讨了在Nuxt3应用中,如何利用Nuxt Apollo客户端同时处理多种认证头(如WooCommerce会话ID和JWT),以解决默认配置下只能指定一个认证头的问题。通过定制Apollo客户端的链路(setContext和ApolloLink)并手动将其注入Nuxt应用,开发者可以获得对请…

    2025年12月20日
    000
  • WordPress中AJAX分页后动态加载JavaScript的策略

    本文旨在解决wordpress网站在使用ajax分页加载内容时,javascript代码无法作用于新加载元素的问题。我们将探讨两种核心策略:优先利用插件提供的特定事件,以及在没有特定事件时,通过全局监听xmlhttprequest的`readystatechange`事件来确保javascript代…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信