将 WordPress Post 元保存到数据库不起作用
Saving WordPress Post Meta to the Database not working
我目前正在学习如何创建 WordPress 插件的教程,但由于某些原因,当涉及到将 Post 元数据保存到数据库的部分时,我的代码无法正常工作。当我单击“发布”或“更新”时,它只是刷新页面,字段中的内容消失了。本教程创建于 2015 年,我不确定我的代码中是否遗漏了某些内容,或者是否对 WordPress 保存数据的方式进行了更改。这是教程特定视频的 link - https://www.youtube.com/watch?v=waS0gCkuLeM&t=64s&index=10&list=PLIjMj0-5C8TI7Jwell1rTvv5XXyrbKDcy
下面是我在该教程中的代码:
<?php
function fd_add_custom_metabox(){
add_meta_box(
'fd_meta',
'Pricing Table',
'fd_meta_callback',
'table',
'normal',
'core'
);}
add_action('add_meta_boxes', 'fd_add_custom_metabox');
function fd_meta_callback( $post ){ //needed for the $callback parameter above
wp_nonce_field(basename( __FILE__ ), 'fd_table_nonce');
$fd_stored_meta = get_post_meta( $post->ID );
?>
<div>
<div class="meta-row">
<div class="meta-th">
<label for="table-title" class="fd-row-title">Title</label>
</div>
<div class="meta-td">
<input type="text" name="table_id" id="table-title" value="<?php if( !empty ($fd_stored_meta['table_id'])) {echo esc_attr($fd_stored_meta['table_id'][0] ); } ?> ">
</div>
</div>
</div>
<div>
<div class="meta-row">
<div class="meta-th">
<label for="table-subtitle" class="fd-row-title">Subtitle</label>
</div>
<div class="meta-td">
<input type="text" name="table_subtitle" id="table-subtitle" value="<?php if( !empty ($fd_stored_meta['table_subtitle'])) {echo esc_attr($fd_stored_meta['table_subtitle'][0]);} ?> ">
</div>
</div>
</div>
<div>
<div class="meta-row">
<div class="meta-th">
<label for="table-recurrence" class="fd-row-title">Recurrence</label>
</div>
<div class="meta-td">
<input type="text" name="table_recurrence" id="table-recurrence" value="">
</div>
</div>
</div>
<div>
<div class="meta-row">
<div class="meta-th">
<label for="table-price" class="fd-row-title">Price</label>
</div>
<div class="meta-td">
<input type="text" name="table_price" id="table-price" value="">
</div>
</div>
</div>
<div>
<div class="meta-row">
<div class="meta-th">
<span>Features</span>
</div>
<div class="meta-td">
<textarea name="table_features" rows="8" cols="50"></textarea>
</div>
</div>
</div>
<div class="meta">
<div class="meta-th">
<span>Some Description</span>
</div>
</div>
<div class="meta-editor">
<?php
$content = get_post_meta($post->ID, 'some_description', true);
$editor = 'some_description';
$settings = array(
'textarea_rows' => 8,
'media_buttons' => true,
);
wp_editor($content, $editor, $settings);
?>
</div>
<?php
}
function fd_meta_save( $post_id ){
//checks save status
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
$is_valid_nonce = ( isset( $_POST[ 'fd_table_nonce']) && wp_verify_nonce( $_POST['fd_table_nonce'], basename( __FILE__ ) ) )? 'true' : 'false';
//Exits script depending on save status
if ( $is_autosave || $is_revision || !$is_valid_nonce){
return;
}
if (isset ($_POST['table_id'])){
update_post_meta( $post_id, 'table_id', sanitize_text_field($_POST[ 'table_id' ]));
}
if (isset ($_POST['table_subtitle'])){
update_post_meta( $post_id, 'table_subtitle', sanitize_text_field($_POST[ 'table_subtitle' ]));
}
if (isset ($_POST['some_description'])){
update_post_meta( $post_id, 'some_description', sanitize_text_field($_POST[ 'some_description' ]));
}
}
add_action('save_post,', 'fd_meta_save');
请注意,我在前两个输入中只有 PHP 来捕获数据,而 wp-editor 最后一个
请帮我看看我哪里做错了或者这两年发生了什么变化。
关于这个问题的更新。看来我在 post 之后的最后有一个逗号 - 所以它应该看起来像这样 add_action('save_post', 'fd_meta_save'); 而不是这个 add_action('save_post,', 'fd_meta_save');
这解决了我的问题。因为是作为字符串读取的,所以无法拾取为语法错误。
经验教训 - 永远不要停止寻找语法错误,即使它们没有被程序检测到
我目前正在学习如何创建 WordPress 插件的教程,但由于某些原因,当涉及到将 Post 元数据保存到数据库的部分时,我的代码无法正常工作。当我单击“发布”或“更新”时,它只是刷新页面,字段中的内容消失了。本教程创建于 2015 年,我不确定我的代码中是否遗漏了某些内容,或者是否对 WordPress 保存数据的方式进行了更改。这是教程特定视频的 link - https://www.youtube.com/watch?v=waS0gCkuLeM&t=64s&index=10&list=PLIjMj0-5C8TI7Jwell1rTvv5XXyrbKDcy
下面是我在该教程中的代码:
<?php
function fd_add_custom_metabox(){
add_meta_box(
'fd_meta',
'Pricing Table',
'fd_meta_callback',
'table',
'normal',
'core'
);}
add_action('add_meta_boxes', 'fd_add_custom_metabox');
function fd_meta_callback( $post ){ //needed for the $callback parameter above
wp_nonce_field(basename( __FILE__ ), 'fd_table_nonce');
$fd_stored_meta = get_post_meta( $post->ID );
?>
<div>
<div class="meta-row">
<div class="meta-th">
<label for="table-title" class="fd-row-title">Title</label>
</div>
<div class="meta-td">
<input type="text" name="table_id" id="table-title" value="<?php if( !empty ($fd_stored_meta['table_id'])) {echo esc_attr($fd_stored_meta['table_id'][0] ); } ?> ">
</div>
</div>
</div>
<div>
<div class="meta-row">
<div class="meta-th">
<label for="table-subtitle" class="fd-row-title">Subtitle</label>
</div>
<div class="meta-td">
<input type="text" name="table_subtitle" id="table-subtitle" value="<?php if( !empty ($fd_stored_meta['table_subtitle'])) {echo esc_attr($fd_stored_meta['table_subtitle'][0]);} ?> ">
</div>
</div>
</div>
<div>
<div class="meta-row">
<div class="meta-th">
<label for="table-recurrence" class="fd-row-title">Recurrence</label>
</div>
<div class="meta-td">
<input type="text" name="table_recurrence" id="table-recurrence" value="">
</div>
</div>
</div>
<div>
<div class="meta-row">
<div class="meta-th">
<label for="table-price" class="fd-row-title">Price</label>
</div>
<div class="meta-td">
<input type="text" name="table_price" id="table-price" value="">
</div>
</div>
</div>
<div>
<div class="meta-row">
<div class="meta-th">
<span>Features</span>
</div>
<div class="meta-td">
<textarea name="table_features" rows="8" cols="50"></textarea>
</div>
</div>
</div>
<div class="meta">
<div class="meta-th">
<span>Some Description</span>
</div>
</div>
<div class="meta-editor">
<?php
$content = get_post_meta($post->ID, 'some_description', true);
$editor = 'some_description';
$settings = array(
'textarea_rows' => 8,
'media_buttons' => true,
);
wp_editor($content, $editor, $settings);
?>
</div>
<?php
}
function fd_meta_save( $post_id ){
//checks save status
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
$is_valid_nonce = ( isset( $_POST[ 'fd_table_nonce']) && wp_verify_nonce( $_POST['fd_table_nonce'], basename( __FILE__ ) ) )? 'true' : 'false';
//Exits script depending on save status
if ( $is_autosave || $is_revision || !$is_valid_nonce){
return;
}
if (isset ($_POST['table_id'])){
update_post_meta( $post_id, 'table_id', sanitize_text_field($_POST[ 'table_id' ]));
}
if (isset ($_POST['table_subtitle'])){
update_post_meta( $post_id, 'table_subtitle', sanitize_text_field($_POST[ 'table_subtitle' ]));
}
if (isset ($_POST['some_description'])){
update_post_meta( $post_id, 'some_description', sanitize_text_field($_POST[ 'some_description' ]));
}
}
add_action('save_post,', 'fd_meta_save');
请注意,我在前两个输入中只有 PHP 来捕获数据,而 wp-editor 最后一个
请帮我看看我哪里做错了或者这两年发生了什么变化。
关于这个问题的更新。看来我在 post 之后的最后有一个逗号 - 所以它应该看起来像这样 add_action('save_post', 'fd_meta_save'); 而不是这个 add_action('save_post,', 'fd_meta_save');
这解决了我的问题。因为是作为字符串读取的,所以无法拾取为语法错误。
经验教训 - 永远不要停止寻找语法错误,即使它们没有被程序检测到