wordpress - 如何使用 PHP 在 WordPress 后端保存元数据
问题描述
我对使用 PHP 在 WordPress 后端发布元数据比较陌生。我已经编写了创建元数据的代码。我需要帮助保存我编写的数据。它还需要允许我在保存后编辑数据。
在这种情况下,它用于文本字段。
我已经为在后端 WordPress 管理区域中显示良好的输入字段创建了元数据。
add_action( 'add_meta_boxes', 'cd_meta_box_add' );
function cd_meta_box_add()
{
add_meta_box( 'my-meta-box-id', 'Job Title', 'cd_meta_box_cb', 'people', 'normal', 'high' );
/* Save post meta on the 'save_post' hook. */
add_action( 'save_post', 'cd_meta_box_add', 10, 2 );
}
function cd_meta_box_cb()
{
echo "<input type='text' name='jobtitle'>";
}
我只需要有关将上述元数据保存到数据库并允许编辑和修订的代码的帮助
解决方案
你快到了。
难题的最后一部分是保存元数据的函数,但首先我们需要对现有代码进行一些调整:
add_action( 'save_post', 'cd_meta_box_add', 10, 2 );
必须搬到外面cd_meta_box_add()
,并且更改
add_action( 'save_post', 'cd_meta_box_add', 10, 2 );
为add_action( 'save_post', 'cd_meta_box_add' );
,因为此操作挂钩仅接收一个参数(帖子 ID),并且您需要定义将处理数据的函数(它不能
cd_meta_box_add
像您现在拥有的那样,所以我们将创建一个名为 的新函数save_cd_meta_box_data
)。
/* Save post meta on the 'save_post' hook. */
add_action( 'save_post', 'save_cd_meta_box_data' );
function save_cd_meta_box_data( $post_id ) {
// Autosaving, bail.
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
// @TODO
// You should add some additional security checks here
// eg. nonce, user capabilities, etc, to prevent
// malicious users from doing bad stuff.
/* OK, it's safe for us to save the data now. */
// Make sure that it is set.
if ( ! isset( $_POST['jobtitle'] ) ) {
return;
}
// Sanitize user input.
$my_data = sanitize_text_field( $_POST['jobtitle'] );
// Update the meta field in the database.
update_post_meta( $post_id, '_job_title', $my_data );
}
- 现在我们已成功将元数据保存到数据库中,让我们允许用户查看/编辑它:
function cd_meta_box_cb( $post )
{
$job_title = get_post_meta( $post->ID, '_job_title', true );
echo "<input type='text' name='jobtitle' value='" . esc_attr( $job_title ) . "'>";
}
最终代码应如下所示:
/* Register and display metabox */
add_action( 'add_meta_boxes', 'cd_meta_box_add' );
function cd_meta_box_add()
{
add_meta_box( 'my-meta-box-id', 'Job Title', 'cd_meta_box_cb', 'people', 'normal', 'high' );
}
function cd_meta_box_cb( $post )
{
$job_title = get_post_meta( $post->ID, '_job_title', true );
echo "<input type='text' name='jobtitle' value='" . esc_attr( $job_title ) . "'>";
}
/* Save post meta on the 'save_post' hook. */
add_action( 'save_post', 'save_cd_meta_box_data' );
function save_cd_meta_box_data( $post_id ) {
// Autosaving, bail.
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
// @TODO
// You should add some additional security checks here
// eg. nonce, user capabilities, etc, to prevent
// malicious users from doing bad stuff.
/* OK, it's safe for us to save the data now. */
// Make sure that it is set.
if ( ! isset( $_POST['jobtitle'] ) ) {
return;
}
// Sanitize user input.
$my_data = sanitize_text_field( $_POST['jobtitle'] );
// Update the meta field in the database.
update_post_meta( $post_id, '_job_title', $my_data );
}
推荐阅读
- reactjs - 如何在 React 中将 div 元素导出为 excel?
- java - Java中是否有某种功能可以将字符转换为位?
- azure-devops - 带有通配符文件名的 Azure 管道 CopyFiles
- bash - Bash遍历目录中的文件输出不存在的文件
- r - 将 OTU 表转换为 betapart 包的二进制表
- sql - 将 SQL 中的结果从正数更改为负数
- amazon-web-services - API GATEWAY 未检索请求正文
- node.js - 如何使用 puppeteer 关闭或取消 http 身份验证窗口?
- c - 如何定义和初始化包含结构体数组的 C 结构体
- reactjs - 在同一个组件中调用自定义钩子两次