Category Archives: WordPress

Wordpress development work.

Haproxy + Varnish + Nginx = real IP problem

If you running Haproxy and your are trying to get the correct REMOTE_ADDR

We had to switch our load balancing from TCP to HTTP

In order to support the xforward header.

Along with nginx real ip module

http://wiki.nginx.org/HttpRealIpModule

The xforward on earlier haproxies does not support tcp or keepalived.

it only work under http. this has changed on latest haproxy like the
beta version 1.53

http://haproxy.1wt.eu/

AutoChimp WordPress plugin mod enable autoresponder

I have been testing out this plugin for wordpress called autochimp. “Version 1.00 | By Wanderer LLC Dev Team ”

Visit plugin site

It seems to be pretty fantastic.

One issue I noticed is that for mailchimp to utilize a autoresponder automatically from leads from this plugin you need to submit a date field or registration date field with the lead. Otherwise the aut oresponder just doesn’t work.

The mod is pretty simple. I created a field on the list then added a field to be sent automatically.

I am not sure if you have to do the first setup but I did and it worked so..

File 88-autochimp.php

Line 408

$merge_vars = array( ‘FNAME’=>$user_info->first_name, ‘LNAME’=>$user_info->last_name, ‘REGDATE’=>date(“Y-m-d”) );

Added the REGDATE line.

I am not sure if it works for sub sites on wordpress. If it doesn’t I attend to modify it so that sub blogs on the network can use it to sync their own mailchimp accounts.

BuddyPress BP admin bar mod work.

Problem with buddypress admin bar login functionality.

When a visit comes to a WPMU site and clicks on the login link at the bp admin bar the default function is to direct them to the primary domain login page.

Once they login they are then directed to the primary domain homepage. The user can still login to there admin panel at that point but it causes the user to have to login again at their own domain.

This is not ideal functionality with mapped domains.

I modded the bp-core-adminbar.php file temporarily to test  a alternate method for the login url. Thus far is seems to work.

//echo ‘<li><a href=”‘ . $bp->root_domain . ‘/wp-login.php?redirect_to=’ . urlencode( $bp->root_domain ) . ‘”>’ . __( ‘Log In’, ‘buddypress’ ) . ‘</a></li>’;
echo ‘<li><a href=”/wp-login.php?redirect_to=’ . urlencode( ‘http://’.$_SERVER[“HTTP_HOST”].’/wp-admin’) . ‘”>’ . __( ‘Log In’, ‘buddypress’ ) . ‘</a></li>’;

This seems to change the behavior so when the visitor clicks on the login page. They are redirected to the same url. Once they are logged in it directs them into there admin area. Seems more logical.

End plugin looks like this

// **** “Log In” and “Sign Up” links (Visible when not logged in) ********
function custom_bp_adminbar_login_menu() {
global $bp;

if ( is_user_logged_in() )
return false;

//echo ‘<li><a href=”‘ . $bp->root_domain . ‘/wp-login.php?redirect_to=’ . urlencode( $bp->root_domain ) . ‘”>’ . __( ‘Log In’, ‘buddypress’ ) . ‘</a></li>’;
echo ‘<li><a href=”/wp-login.php?redirect_to=’ . urlencode( ‘http://’.$_SERVER[“HTTP_HOST”].’/wp-admin’) . ‘”>’ . __( ‘Log In’, ‘buddypress’ ) . ‘</a></li>’;
// Show “Sign Up” link if user registrations are allowed
if ( bp_get_signup_allowed() ) {
echo ‘<li><a href=”‘ . bp_get_signup_page(false) . ‘”>’ . __( ‘Sign Up’, ‘buddypress’ ) . ‘</a></li>’;
}
}

function my_alter_bp_adminbar() {
remove_action( ‘bp_adminbar_menus’, ‘bp_adminbar_login_menu’,2);
add_action( ‘bp_adminbar_menus’, ‘custom_bp_adminbar_login_menu’, 2 );
}

// Modify BP Login
add_action(‘wp_footer’,’my_alter_bp_adminbar’,1);

MU Affiliate work – Adding MLM aspect to affiliate program

Affiliate Multi level tree totals
Affiliate report area

Made several minor tweak to enable a virtually unlimited size down line /  commission system

Added tree view. This will display grand totals of all the members that are in your down line.

In the admin area I added a option to set the amount of levels to pay on.

From there this menu will generate the appropriate amount of boxes that can be used to set the percentage to be paid on each level.

2 Levels Deep

Then 9 levels deep

Supporter with 9 levels of commission

In order to store the data efficiently I created this table.


— Table structure for table `wp_affiliate_tree`

CREATE TABLE `wp_affiliate_tree` (
`user_id` bigint(20) NOT NULL,
`ref_user_id` bigint(20) NOT NULL,
`lvl` mediumint(6) NOT NULL,
PRIMARY KEY  (`user_id`,`ref_user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=’affiliate support tree’;

Upon a user activation I added a hook to build the new users full tree.

This function activates the new user as a affiliate and builds there tree

function initial_register_affiliate($user_id, $password, $met){
$user_info=get_userdata($user_id);
$reference = $user_info->user_login. ‘-‘ . strrev(sprintf(‘%02d’, $user_id + 35));
update_usermeta($user_id, ‘enable_affiliate’, ‘yes’);
update_usermeta($user_id, ‘affiliate_reference’, $reference);
update_usermeta($user_id, ‘affiliate_hash’, ‘aff’ . md5(AUTH_SALT . $reference));
$refer_user_id=$user_info->affiliate_referrer;
// If referred by another user_id then build upline tree
if($refer_user_id){

global $wpdb;
$sql = $wpdb->prepare( “INSERT IGNORE INTO “.$wpdb->base_prefix.”affiliate_tree (user_id, ref_user_id, lvl) VALUES (%d, %d, 1)”, $user_id,$refer_user_id );
$queryresult = $wpdb->query($sql);

$sql = $wpdb->prepare( “INSERT IGNORE INTO  “.$wpdb->base_prefix.”affiliate_tree (user_id, ref_user_id, lvl)
SELECT %d, ref_user_id, lvl+1 FROM “.$wpdb->base_prefix.”affiliate_tree WHERE  user_id=%d”, $user_id, $refer_user_id );
$queryresult = $wpdb->query($sql);
}
}

From there I tweaked the supporter-amazon.php and paypal file as there was  a bug that was causing the affiliate payment process not to load.

Also on the affiliate program  there were some other random fixes. I worked the code regarding a user showing up on a user page without a referralid.

It now cross references the blog that they landed on with adminstrator of the blog. It uses that data to set the cookie.

There was a problem with the cookie being set by the ‘ref’ get query.. However at that point in the code it was not defined.

if(defined(‘AFFILIATE_CHECKALL’)) {
// We are here if there isn’t a reference passed, so we need to check the referrer.
if(!isset( $_COOKIE[‘affiliate_’ . COOKIEHASH]) && isset($_SERVER[‘HTTP_REFERER’])) {
// We haven’t already been referred here by someone else – note only the first referrer
// within a time period gets the cookie.
$referrer = parse_url($_SERVER[‘HTTP_REFERER’], PHP_URL_HOST);
global $wpdb;

// Check if the user is a valid referrer
//$affiliate = $this->db->get_var( $this->db->prepare( “SELECT user_id FROM {$this->db->usermeta} WHERE meta_key = ‘affiliate_referrer’ AND meta_value=’%s'”, $referrer) );
$affiliate = $this->db->get_var( $this->db->prepare( “SELECT b.user_id FROM ” . $wpdb->base_prefix . “blogs a,  ” . $wpdb->base_prefix . “bp_user_blogs b WHERE  a.blog_id=b.blog_id AND a.domain=’%s’ LIMIT 1”, $referrer) );

// Check for mapped domain.
if(!$affiliate){
$affiliate = $this->db->get_var( $this->db->prepare( “SELECT b.user_id FROM ” . $wpdb->base_prefix . “domain_mapping a,  ” . $wpdb->base_prefix . “bp_user_blogs b WHERE  a.blog_id=b.blog_id AND a.domain=’%s’ LIMIT 1”, $referrer) );
}

if($affiliate) {
$_GET[‘ref’]=$this->db->get_var( $this->db->prepare( “SELECT meta_value FROM {$this->db->usermeta} WHERE meta_key = ‘affiliate_reference’ AND user_id=’%s'”, $affiliate) );
// Update a quick count for this month
do_action( ‘affiliate_click’, $affiliate);
// Store the referrer
do_action( ‘affiliate_referrer’, $affiliate, $referrer );

// Write the affiliate hash out – valid for 30 days.
@setcookie(‘affiliate_’ . COOKIEHASH, ‘aff’ . md5(AUTH_SALT . $_GET[‘ref’]), (time() + (60*60*24*30)), COOKIEPATH, COOKIE_DOMAIN);
} else {
if(defined(‘AFFILIATE_SETNOCOOKIE’)) @setcookie(‘noaffiliate_’ . COOKIEHASH, ‘notanaff’, 0, COOKIEPATH, COOKIE_DOMAIN);
}
}
}