如何使用php在wordpress post中获取gravatar?
我知道get_avatar()函数,但它不起作用。也许是因为循环的复杂性?请看下面的代码,让我知道!谢谢如何使用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
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' );