解决多站点中的GET_USER_META()问题

时间:2012-04-30 作者:chris_s

我目前正在为个人房地产经纪人建立博客网络。目前,经纪人将拥有一个主站点,并将代理站点添加为子目录,例如www.example。com和www.example。com/代理。每个代理的front-page.php 模板有一个显示代理联系信息的区域。我当前正在使用get_user_meta() 在我的主题模板中,可以从用户配置文件中访问用户信息,但我很快意识到,当我访问该数据时,没有相对的方法来访问特定子目录的用户信息。当我使用此代码时:

echo get_user_meta(2, \'display_name\', true);
在主题模板中,该主题在网络上的每次安装都默认为user_id=2s信息。从逻辑上讲,我理解原因。但是我怎样才能让Joe的信息出现在www.example上呢。com/joe和Chris的信息显示在www.example上。通信/克里斯?我正在寻找一个解决方案,可以在管理中定义某种方式,所以缩放这个主题是尽可能简单。

编辑:我想现在考虑一下,一个可能的解决方案是使用get_option 调用输入的信息。我只是希望有一种更简单的方法来检索用户信息,因为其中一些信息是在用户创建过程中创建的。如果你认为你有一个很好的解决这个问题的方法,我认为值得一写。我无法通过这种方式找到有关user\\u meta和multisite的任何信息。

2 个回复
最合适的回答,由SO网友:Boone Gorges 整理而成

问题是“特定子目录的用户”的想法在WP中并不真正存在。有站点(“子目录”),有用户,用户可以与站点关联(通过角色和功能),但不能保证一对一的通信。

如果您正在运行一个用户已经注册了自己博客的网络,那么您很可能会使用\'primary_blog\' usermeta项以获取所需信息。将以下功能放入网络激活的插件中:

function wpse_50705_get_primary_user_for_blog() {
    global $wpdb;
    return $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM $wpdb->usermeta WHERE meta_key = \'primary_blog\' AND meta_value = %d", get_current_blog_id() ) );
}
然后,在模板文件中,

echo get_user_meta( wpse_50705_get_primary_user_for_blog(), \'display_name\', true );
在大多数情况下,这应该适用于每个用户都有一个主博客的情况-没有人有多个博客,也没有多个用户的博客作为主博客。

SO网友:jessica

如果子目录名称始终与要显示的人的用户名匹配,则可以执行以下操作:

<?php
global $current_blog;
$username = trim($current_blog->path, \'/\');
if ($user_id = user_exists($path))
{
    echo get_user_meta($user_id, \'display_name\', true);
}
else
{
    echo "User not found: $username";
?>

结束

相关推荐

为什么Wordpress w/Nginx MultiSite只允许管理员上传ZIP插件,而不允许上传主题?

Wordpress 3.3多站点/NginX。我可以上传所有我想要的ZIP格式的插件,但我不能上传一个压缩的主题,而且它的大小不能超过2兆克。我找不到这些愚蠢的规则在哪里。有没有办法只使用SFTP?在这一点上,我将与黑客们碰碰运气,但只有ssh的生活简直是悲惨的地狱。请给我一个提示,告诉我如何从我的电脑中以zip文件的形式将主题发送到服务器上。谢谢。user www-data; worker_processes 4; error_log /var/log/nginx/nginx.log