我在管理的链接部分保存元框的数据时遇到问题。我的代码正在运行,因为当我在帖子或页面部分尝试它时,它会保存数据,但在链接中却不会。
这是我的密码。我应该写些别的东西而不是“save\\u post”吗?我看到一些使用过的“save\\u link”尝试过,尽管人们回复说它不存在,但它不起作用。。。我的意思是,当我将其添加到帖子或页面时,它会起作用,但当我将“页面”(或“帖子”)更改为“链接”时,当我添加元框时,不会保存任何内容,当我再次转到链接表单时,当我应该拥有图像的链接时,我的输入返回空白。数据也没有保存在数据库中,我也不知道为什么。
这是我的代码:
add_action( \'admin_init\', \'meta_boxes_setupa\' );
function meta_boxes_setupa() {
add_action( \'add_meta_boxes\', \'mytheme_add_box\' );
add_action( \'save_post\', \'mytheme_save_data\', 10, 2 );
}
// add_action(\'admin_menu\', \'mytheme_add_box\');
// Add meta box
function mytheme_add_box() {
add_meta_box(
\'my-meta-box\',
\'Ajouter le logo de la société\',
\'mytheme_show_box\',
\'link\',
\'normal\',
\'high\'
);
}
// Callback function to show fields in meta box
function mytheme_show_box( $object, $box ) {
// global $post;
// echo \'<input type="hidden" name="mytheme_meta_box_nonce" value="\', wp_create_nonce(basename(__FILE__)), \'" />\';
// $meta = get_post_meta($post->ID, \'_upload_image\', true);
?>
<?php wp_nonce_field( basename( __FILE__ ), \'url_nonce\' ); ?>
<label for="upload_image">Sélectionner le logo : </label>
<input type="text" name="upload_image" id="upload_image" value="<?php echo esc_attr( get_post_meta( $object->ID, \'_upload_image\', true ) ); ?>" size="40" readonly="readonly" />
<input type="button" name="upload_image_button" id="upload_image_button" value="Parcourir" ?>
<?php
}
// Save data from meta box
function mytheme_save_data($post_id, $post) {
if ( !isset( $_POST[\'url_nonce\'] ) || !wp_verify_nonce( $_POST[\'url_nonce\'], basename( __FILE__ ) ) )
return $post_id;
$post_type = get_post_type_object( $post->post_type );
/* Check if the current user has permission to edit the post. */
if ( !current_user_can( $post_type->cap->edit_post, $post_id ) )
return $post_id;
/* Get the posted data and sanitize it for use as an HTML class. */
$new_meta_value = ( isset( $_POST[\'upload_image\'] ) ? sanitize_html_class( $_POST[\'upload_image\'] ) : \'\' );
/* Get the meta key. */
$meta_key = \'_upload_image\';
/* Get the meta value of the custom field key. */
$meta_value = get_post_meta( $post_id, $meta_key, true );
/* If a new meta value was added and there was no previous value, add it. */
if ( $new_meta_value && \'\' == $meta_value )
add_post_meta( $post_id, $meta_key, $new_meta_value, true );
/* If the new meta value does not match the old value, update it. */
elseif ( $new_meta_value && $new_meta_value != $meta_value )
update_post_meta( $post_id, $meta_key, $new_meta_value );
/* If there is no new meta value but an old value exists, delete it. */
elseif ( \'\' == $new_meta_value && $meta_value )
delete_post_meta( $post_id, $meta_key, $meta_value );
}
function my_admin_scripts() {
wp_enqueue_script(\'media-upload\');
wp_enqueue_script(\'thickbox\');
wp_register_script(\'my-upload\', get_bloginfo(\'template_url\') . \'/functions/my-script.js\', array(\'jquery\',\'media-upload\',\'thickbox\'));
wp_enqueue_script(\'my-upload\');
}
function my_admin_styles() {
wp_enqueue_style(\'thickbox\');
}
add_action(\'admin_print_scripts\', \'my_admin_scripts\');
add_action(\'admin_print_styles\', \'my_admin_styles\');
谢谢你的帮助!
最合适的回答,由SO网友:Stephen Harris 整理而成
你要找的钩子是edit_link
(我找不到任何文档)。是从里面发射的wp_insert_link
(无论何时创建或更新链接,都会触发自身)。
该操作只向回调传递一个参数,即链接的ID。因此,您需要将2更改为1add_action
电话:
add_action( \'edit_link\', \'mytheme_save_data\', 10, 1 );
并移除
$post
回调函数中的变量:
function mytheme_save_data($post_id) {
//Your function here
}
其他差异在metabox回调函数中(显示上载按钮等)。您使用
$object->ID
. 对于链接,这应该是
$object->link_id
. 在您的
edit_link
回调,您使用
$post
获取帖子类型。此变量不再对您可用,并且在任何情况下
links are not post types由于上述原因,您必须更改检查权限的方式,我认为您要检查的是
current_user_can(\'manage_links\')