回显分隔表中用户的用户ID

时间:2012-06-26 作者:angiemeeker

{   
    $ad_code = str_replace("xxxx",$_SESSION[\'user_id\'],$resultset->description);
    $ad_code = str_replace("XXXX",$_SESSION[\'user_id\'],$ad_code);
    echo \'<tr>\';
    echo \'<td class="col2"><strong>\'.$resultset->name.\'</strong></td>\';
    echo \'<td><textarea cols=65 rows=5>\';
    echo $ad_code;
    echo "</textarea></td>";                
    echo \'</tr>\';
}
我正在使用一个名为WordPress Affiliate Platform的插件,它在一个与典型WP用户不同的表中创建了(我认为)用户,这样就不会混合Affiliate用户和WP用户。

我想检索登录的affilite的用户ID,以便我可以列出分支机构的当前页面引用url:

站点范围的参考url示例:http://domain.com/?ap_id=AMEEKERhttp://domain.com/myproduct?ap_id=AMEEKER?ap_id=AMEEKER 在当前页面URL之后获取其附属链接。这很好,但有点乏味,可能会让附属公司面临并非其真正过错的错误。

我确信有一种方法可以只回显当前页面的URL,然后是?ap\\u id=和分支机构的用户id,但我很难找到如何检索分支机构的用户id。

插件本身通过某种方式将xxxx转换为用户id来实现这一点。

domain.com/myproduct?ap_id=XXXX

我在上面粘贴了一些来自分支机构仪表板的代码,以及插件确实提取分支机构ID并为登录用户动态显示的区域。查看插件文件中的模板,我发现我认为是动态地将XXXX转换为实际的附属ID的代码,但我不知道该怎么做,或者仅此一项就可以帮助我得到我想要的。我的意思是,我可以看到它在做什么,但还不足以知道我现在是否可以用它做什么!

(不是程序员,更像是修补匠)。

我问过插件作者,他似乎给予了很好的支持,但这个功能似乎在他们的网站上被要求了好几次,他们的答案是一样的。没有什么不愉快的感觉,但我想看看能不能做到。

任何帮助都将不胜感激。

1 个回复
最合适的回答,由SO网友:EAMann 整理而成

在查看了插件的代码之后,似乎没有一种简单的方法可以做到这一点。

附属机构存储在一个与WP users表没有直接关系的表中-这意味着您可以拥有非附属机构的用户,也可以拥有非用户的附属机构。这就是为什么有一个大的;“导入WP用户”;选项这不是自动的。

当分支机构登录时,会有代码自动启动PHP会话,将其分支机构ID存储为会话变量,并将其设置为cookie,以便稍后检索:

global $wpdb;
$affiliates_table_name = WP_AFF_AFFILIATES_TABLE;        
$result = $wpdb->get_row("SELECT * FROM $affiliates_table_name where refid=\'$userid\'", OBJECT);
    
if($wp_hasher->CheckPassword($password, $result->pass))
{
    // this sets session and logs user in
    if(!isset($_SESSION)){@session_start();}
    // this sets variables in the session
    $_SESSION[\'user_id\']= $userid;
    setcookie("user_id", $userid, time()+60*60*6, "/"); //set cookie for 6 hours

    // ... and so on
}
目前,该插件根本没有使用WordPress的用户管理系统。

总结

您看到的关联id与系统中的用户名不同,并且您无法运行查询,根据关联id从WordPress的用户表中提取用户名/id(反之亦然),因为系统中任何地方都没有与这两者相关的数据。

获取分支机构ID如果用户已登录,则只需获取分支机构ID,则只需查看cookie集合或当前会话:

function get_current_affiliate_id() {
    $affiliate_id = false;

    if ( isset( $_SESSION ) && isset( $_SESSION[\'user_id\'] )
        $affiliate_id = $_SESSION[\'user_id\'];

    if ( ! $affiliate_id && isset( $_COOKIE[\'user_id\'] ) )
        $affiliate_id = $_COOKIE[\'user_id\'];

    return $affiliate_id;
}
如果用户已登录,则应同时设置会话变量和cookie。然后,此函数将返回用户ID(如果服务器端会话出现问题,即有人在使用站点时服务器重新启动,则cookie检查只是一种回退)。如果用户未登录,该功能将返回false.

一旦你有了他们的ID,你就可以使用插件附带的其他功能来获取你需要的任何信息。

结束

相关推荐

Beta Versioning of Plugins

当我为一些bug编写修复程序时,我通常会增加版本并将其发送给bug查找程序,以查看我的修复程序是否有效。如果我有1.2.5 我想创建一个测试版,一旦我提交代码,它将变得多余,我应该使用1.2.5-beta 或1.2.6-beta? 我担心的是1.2.6 <;1.2.6-beta 因此,字符串比较可能有利于beta版,而bug查找程序不会收到发布稳定版本的通知。编辑:如果在不考虑发布类型的情况下对字符串进行绝对比较,则可以使用1.2.5-fix 然后1.2.6. 该问题也概述在http://en.wik