Orderby=meta_value_num创建重复帖子

时间:2013-07-10 作者:ndru

我将我的facebook喜好存储在名为fb\\U likes的自定义字段中。我的wordpress帖子顺序按此字段排序,如下所示。

 \'meta_key\' => \'fb_likes\',
 \'orderby\' => \'meta_value_num\',
 \'order\' => \'DESC\',
 \'ignore_sticky_posts\' => 1,
 \'posts_per_page\' => $wp_query->get(\'posts_per_page\'),
 \'paged\' => $paged
乍一看,这似乎很好,但如果你点击页面,你会注意到,有些帖子会显示两次(甚至三次),即使它们只在数据库中显示一次。此外,邮政秩序混乱,似乎改变了自己。

当我使用meta\\u value而不是meta\\u value\\u num时,效果很好,但问题是它的排序是这样的->9,5,4,39,38,37,26-你明白了。所以我需要meta\\u value\\u num才能按预期工作。

有什么问题吗?

编辑:我使用以下代码将facebook的喜欢度写入fb\\U喜欢度的meta\\u值。如果我能以某种方式写入元值,比如这个“001”,而不是这个“1”。这样我就可以轻松地使用orderby=meta\\u value,甚至不需要meta\\u value\\u num。

有没有这样的方法写入数据库?1个喜欢->001,21个喜欢->021

{
        if($post->post_type == \'draft\') continue;
        $fb = json_decode(file_get_contents(\'http://graph.facebook.com/?id=\'.get_permalink($post->ID)));
        if( !isset( $fb->likes) && isset($fb->shares) )
        {
            $fb->likes = $fb->shares;
        }
        //$fb->likes = isset($fb->likes) ? $fb->likes : 0;
        $this->log("post_id: ({$post->ID}) \\npermalink: ".get_permalink($post->ID) . "\\nfb_likes:". $fb->likes . "\\n"); 
        update_post_meta($post->ID, \'fb_likes\', (int)$fb->likes);
    }

2 个回复
SO网友:Johannes Pille

至于编辑(前导零):

/* will print "001" */
echo sprintf( "%03d", 1 );

/* will print "00097" */
echo sprintf( "%05d", 97 );
至于初始问题:

显然,我相信你的问题描述,但如果\'orderby\' => \'meta_value\' 不会产生重复结果,也不应更改为\'orderby\' => \'meta_value_num\'.
如果这是您所做的唯一更改,它应该只更改顺序。。。

SO网友:ndru

我现在已经修复了它-我只是在meta\\u value字段中写入了前导零,并使用了普通的orderby=meta\\u value命令。现在我的数据库中已经有了带前导零的like。

$myfblikes = sprintf("%04s", (int)$fb->likes);
        update_post_meta($post->ID, \'fb_likes\', $myfblikes);
谢谢你的帮助。我完全理解这一点,即它也应该与meta\\u value\\u num一起工作,因为这个命令实际上应该只更改后序。但不知怎的,它并没有——所以我的meta\\u value\\u num肯定有问题。我甚至不知道如何输出原始sql,因为这是我第一次使用php/mysql;)

不管怎样,我很高兴我能成功。

结束