我在编辑链接页面添加了一个元框&无论我在现场投入什么,我都无法保存数据。如何在不保存数据库中的数据的情况下更新元框?这是我的代码:
// backwards compatible
add_action( 'admin_init', 'blc_add_custom_link_box', 1 );
/* Do something with the data entered */
add_action( 'save_link', 'blc_save_linkdata' );
/* Adds a box to the main column on the Post and Page edit screens */
function blc_add_custom_link_box() {
add_meta_box(
'backlinkdiv',
'Backlink URL',
'blc_backlink_url_input',
'link',
'normal',
'high'
);
}
/* Prints the box content */
function blc_backlink_url_input( $post ) {
// Use nonce for verification
wp_nonce_field( plugin_basename( __FILE__ ), 'blc_noncename' );
// The actual fields for data entry
echo '<input type="text" id="backlink-url" name="backlink_url" value="put your backlink here" size="60" />';
#echo "<p> _e('Example: <code>http://Example.org/Linkpage</code> — don’t forget the <code>http://</code>')</p>";
}
如何保存或更新元数据输入字段的数据?只应在元数据库中更新数据。它不应该通过任何类型的自定义字段保存在数据库中。
答案 0 :(得分:4)
我认为保存为自定义字段实际上是一个好主意,只有一个不会显示在自定义字段框中。您可以通过在自定义字段名称的开头添加“_”来完成后者(即“_my_custom_field”而不是“my_custom_field”。
这是保存元数据数据的示例函数。我更改了名称以匹配您上面的代码。
<?php
function blc_save_postdata($post_id){
// Verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( !wp_verify_nonce( $_POST['blc_noncename'], plugin_basename(__FILE__) )) {
return $post_id;
}
// Verify if this is an auto save routine. If it is our form has not been submitted, so we dont want
// to do anything
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return $post_id;
// Check permissions to edit pages and/or posts
if ( 'page' == $_POST['post_type'] || 'post' == $_POST['post_type']) {
if ( !current_user_can( 'edit_page', $post_id ) || !current_user_can( 'edit_post', $post_id ))
return $post_id;
}
// OK, we're authenticated: we need to find and save the data
$blc = $_POST['backlink_url'];
// save data in INVISIBLE custom field (note the "_" prefixing the custom fields' name
update_post_meta($post_id, '_backlink_url', $blc);
}
//On post save, save plugin's data
add_action('save_post', array($this, 'blc_save_postdata'));
?>
那应该是它。我使用此页面作为参考:http://codex.wordpress.org/Function_Reference/add_meta_box
答案 1 :(得分:0)
挂钩动作save_post
- 它会收到已保存的帖子ID,并允许您在提交帖子编辑页面时以您需要的方式更新帖子。不要忘记,每次保存帖子都会调用此操作 - 您只需要处理包含自定义元框的帖子。
答案 2 :(得分:0)
您必须停用此代码
if(已定义('DOING_AUTOSAVE')&amp;&amp;&amp; DOING_AUTOSAVE) return $ post_id;
它的作用是阻止你的代码,因为它检测到你正在做一些自动保存。