想想你在这里做什么。你正沉浸在WordPress的时代saving a post. 您需要使用get_post_meta()
检查保存帖子是否具有所需的元键。
如果你什么都没有得到,或者get_post_meta()
返回false,然后您需要使用add_post_meta()
.
如果你得到了一些东西,请检查get_post_meta()
, 它们是否合适?是否需要更改?这是您决定是否需要致电的地方update_post_meta()
.
一旦您验证了您的保存帖子有可用的元数据,那么您应该继续更新您的自定义数据库表。。。同样的规则也适用于post meta和自定义数据库表。
检查自定义数据库表中的数据。然后确定是使用数据插入自定义数据库表还是使用数据更新自定义数据库表。
根据您提供的代码,我试图拼凑一个示例供您使用。
function my_save_post($post_id, $post){
global $wpdb;
/* Not doing an auto save. */
if(defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE){
return;
}
/* Make sure we have the post data. */
if(!isset($post)){
return;
}
/* Validate the correct post type and make sure it\'s not a post revision. */
if($post->post_type == \'post\' && $post->post_status == \'publish\' && !wp_is_post_revision($post_id)){
/* Fetch the post meta for this post. */
$meta = get_post_meta($post_id, \'banner_link\', true);
if(!$meta){
// No meta for this post with the key of \'banner_link\'. Add your post meta.
} else{
// Meta data with a key of \'banner_link\' was found. Update your post meta.
}
/* Meta data has either been added or updated. Fetch the data again. */
$meta = get_post_meta($post_id, \'banner_link\', true);
/* Set the counter to 1. */
$counter = 1;
/* Check if data already exists for this post in the custom database table. */
$my_data = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}banner_views WHERE postid = {$post_id}");
if(!empty($my_data)){
/* Update the custom database table, with data from this post. */
$wpdb->update(
$wpdb->prefix.\'banner_views\',
array(
\'link\' => $meta,
\'view_count\' => $counter,
),
array(\'postid\' => $post_id),
array(
\'%s\',
\'%d\'
),
array(\'%d\')
);
} else{
/* Initially insert the data for this post in the custom database table. */
$wpdb->insert(
$wpdb->prefix.\'banner_views\',
array(
\'postid\' => $post_id,
\'link\' => $meta,
\'view_count\' => $counter,
),
array(
\'%d\',
\'%s\',
\'%d\'
)
);
}
}
}
add_action(\'save_post\', \'my_save_post\', 10, 2);
这并不是百分之百的完整,更具体地说,是关于post meta。希望这有帮助。
我个人的意见。。。
您可能应该使用post-meta存储所有内容,除非有合理的理由将其存储在单独的数据库表中。
Note: 您还需要对计数器进行一些操作。现在,无论发生什么情况,您总是将其设置为1。