如何使用php在wordpress post中获取gravatar?

如何使用php在wordpress post中获取gravatar?,php,html,wordpress,Php,Html,Wordpress,我知道get_avatar()函数,但它不起作用。也许是因为循环的复杂性?请看下面的代码,让我知道!谢谢 function displaymeta(){ global $post; $m_meta_description = get_post_meta($post->ID, 'my_meta_box_check', true); global $wpdb

我知道get_avatar()函数,但它不起作用。也许是因为循环的复杂性?请看下面的代码,让我知道!谢谢

function displaymeta(){
        global $post;
        $m_meta_description = get_post_meta($post->ID, 'my_meta_box_check', 
                                            true);
        global $wpdb;
        $user_nicenames = $wpdb->get_results("SELECT id,user_nicename FROM 
        {$wpdb->prefix}users", ARRAY_N);

        foreach($user_nicenames as $nice_name) 
        {
            foreach($nice_name as $name) 
            {
                foreach($m_meta_description as $val)
                {
                    $flag=strcmp($name,$val);
                    if($flag==0)
                    {
                        echo"<li>";
                        echo $name. "<br>";
                        echo get_avatar($name->ID,50);
                        echo"</li>";
                    }
                }
            }
        }
}
add_filter( 'the_content', 'displaymeta' );
函数displaymeta(){
全球$员额;
$m\u meta\u description=get\u post\u meta($post->ID,'my\u meta\u box\u check',
正确的);
全球$wpdb;
$user\u nicenames=$wpdb->get\u results(“选择id,user\u nicenames FROM
{$wpdb->prefix}用户”,数组N);
foreach($user\u nicenames作为$nice\u name)
{
foreach($nice_name作为$name)
{
foreach($m_meta_描述为$val)
{
$flag=strcmp($name,$val);
如果($flag==0)
{
回声“
  • ”; echo$name。“
    ”; echo获得阿凡达($name->ID,50); 回声“
  • ”; } } } } } 添加_过滤器('the_content','displaymeta');

    我在函数get\u avatar($val->ID,50)中尝试了$name、$nice\u name、$user\u nicenames;但似乎什么都不管用!我在这里遗漏了什么?

    您已经使用了正确的
    功能,即
    get\u avatar()

    但问题是
    中的
    get\u avatar($name->ID,50)
    不是
    对象。相反,它是一个
    字符串
    ,可以是用户ID或显示名称(即WordPress用户表中的
    用户名称
    列)

    因此,请尝试将
    displaymeta()
    函数中的
    foreach
    替换为下面的函数,我将
    $name
    分配给
    $nice\u name[1]
    ,并将用户ID分配给
    $user\u ID

    foreach($user_nicenames as $nice_name) 
    {
        $user_id = $nice_name[0];
        $name = $nice_name[1];
    
        foreach($m_meta_description as $val)
        {
            $flag=strcmp($name,$val);
            if($flag==0)
            {
                echo"<li>";
                echo $name. "<br>";
                echo get_avatar($user_id,50);
                echo"</li>";
            }
        }
    }
    
    然后变量
    $nice\u name
    将是一个
    对象
    。因此,您可以像这样访问
    $nice\u name->user\u nice name

    $user_id = $nice_name->id;
    $name = $nice_name->user_nicename;
    

    更新 在回复您对缺失内容的评论时,这是因为您没有捕获WordPress通过内容过滤器传递的变量。您还需要将
    LI
    附加到
    $content
    ,最后
    返回修改后的内容(即
    $content

    因此,请尝试此代码(它已经在使用我之前或上面提供的新的
    foreach
    代码):

    函数displaymeta($content){
    全球$员额;
    $m\u meta\u description=get\u post\u meta($post->ID,'my\u meta\u box\u check',
    正确的);
    全球$wpdb;
    $user\u nicenames=$wpdb->get\u results(“选择id,user\u nicenames FROM
    {$wpdb->prefix}用户”,数组N);
    //添加开头UL标签。如果不需要,请移除。
    $content.='
      '; foreach($user\u nicenames作为$nice\u name) { $user_id=$nice_name[0]; $name=$nice_name[1]; foreach($m_meta_描述为$val) { $flag=strcmp($name,$val); 如果($flag==0) { $content.=“
    • ”; $content.=$name.“
      ”; $content.=get_avatar($user_id,50); $content.=“
    • ”; } } } //添加结束UL标签。如果不需要,请删除。 $content.='
    '; 返回$content; } 添加_过滤器('the_content','displaymeta');

    希望有帮助!=)

    你怎么知道它不起作用了?您是否收到任何错误消息?如果是,让我们知道它是什么。如果没有,你确定是
    get_avatar()
    函数失败了,还是他们没有传递你的if语句?@DirkScholten是的,它正在传递我的if语句,因为echo$name;工作正常。但是我不能让格雷瓦塔出现在我的帖子上。只显示默认的gravatar。是的,我已经检查了设置,并且启用了头像。get_头像只接受ID或电子邮件。您是否在代码中测试了$name->ID实际返回的值?显然,$name->ID没有返回anything@KomalR它不会“返回”任何内容,因为
    $name
    不是
    对象。检查我的答案,好的,明白了。谢谢,莎莉,我会看看它对我有什么作用。当然,慢慢来。仅供参考,你也可以只使用
    $wpdb->users
    ,而不必像
    {$wpdb->prefix}用户那样使用
    {$wpdb->prefix}
    。萨利,你让我开心了!谢谢,很好用!:)干杯嘿,当我执行这段代码时,我帖子上唯一的内容就是作者的名字及其头像。我希望这个出现在文章内容之后。帖子内容丢失。你能帮我吗?是的,那是真的。在你为我做了这么多的帮助之后,你真的值得那次投票
    $user_id = $nice_name->id;
    $name = $nice_name->user_nicename;
    
    function displaymeta( $content ){
        global $post;
        $m_meta_description = get_post_meta($post->ID, 'my_meta_box_check', 
                                            true);
        global $wpdb;
        $user_nicenames = $wpdb->get_results("SELECT id,user_nicename FROM 
        {$wpdb->prefix}users", ARRAY_N);
    
        // Add the opening UL tag. Remove if not needed.
        $content .= '<ul>';
    
        foreach($user_nicenames as $nice_name) 
        {
            $user_id = $nice_name[0];
            $name = $nice_name[1];
    
            foreach($m_meta_description as $val)
            {
                $flag=strcmp($name,$val);
                if($flag==0)
                {
                    $content .= "<li>";
                    $content .= $name. "<br>";
                    $content .= get_avatar($user_id,50);
                    $content .= "</li>";
                }
            }
        }
    
        // Add the closing UL tag. Remove if not needed.
        $content .= '</ul>';
    
        return $content;
    }
    add_filter( 'the_content', 'displaymeta' );