在保存帖子时获取元密钥值

时间:2012-10-04 作者:pixelngrain

我试图在保存或更新帖子时插入元键值,但不知何故,它并没有将元键值插入到link 我的自定义列表的列被调用wp_banner_views

function get_publishing_id($post_id) {
    global $wpdb;
    global $post;

    $post= get_post($post_id);
    if ($post->post_type == \'post\'
      && $post->post_status == \'publish\') {

        $meta = get_post_meta($post->ID, \'banner_link\', true);

        if(empty ($counter)) {

            $counter = 1;

            $wpdb->insert( 
                $wpdb->prefix . \'banner_views\', 
                array( 
                    \'postid\' => $post->ID,
                    \'link\' => $meta,
                    \'view_count\' => $counter,
                ),
                array(
                    \'%d\',
                    \'%s\',
                    \'%d\'
                )
            );          
        }



    }
}
add_action(\'save_post\',\'get_publishing_id\'); 
我正在尝试为横幅制作点击和查看计数器。我已完成查看计数器,但正在尝试创建单击计数器。这方面的任何自动建议都是适当的。

1 个回复
SO网友:Michael Ecklund

想想你在这里做什么。你正沉浸在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。

结束

相关推荐

如何在微件管理页面上使用jQuery

我的小部件有一个很长的表单配置,所以我考虑使用单选按钮来隐藏和显示相关的输入字段,而不是将它们一一显示。但它似乎不起作用。我想这是因为表单加载了ajax?有没有办法让它发挥作用?请查看此处的代码:http://jsfiddle.net/JmVL3/