query($query); // remove orphaned address records $query = " DELETE {$table_prefix}alc_address FROM {$table_prefix}alc_address LEFT OUTER JOIN {$table_prefix}alc_link ON ({$table_prefix}alc_link.id = {$table_prefix}alc_address.linkId) WHERE ({$table_prefix}alc_link.id IS NULL)"; $wpdb->query($query); // finally, remove orphaned log records $query = " DELETE {$table_prefix}alc_redirectlog FROM {$table_prefix}alc_redirectlog LEFT OUTER JOIN {$table_prefix}alc_address ON ({$table_prefix}alc_address.id = {$table_prefix}alc_redirectlog.addressId) WHERE ({$table_prefix}alc_address.id IS NULL)"; $wpdb->query($query); $message = 'Affiliate link(s) removed.'; } ?>

Affiliate links Add New

' . $message . '

'; } if (sizeof($errors)) { echo '

' . implode('
', $errors) . '

'; } ?>

Affiliate URL Trigger

URL Trigger
(Default: recommends)

Affiliate link cloaker is free - wahay!. Please support it with one of the options below - I would really appreciate it :-)

  1. Vote for the affiliate link cloaker on the wordpress plugin site
  2. Leave a comment on my blog or support forums (and/or leave a suggestion for a new feature)
  3. Use my Region detect plugin to geo target your affiliate links
  4. Make a paypal donation (no amount is too small)
  5. Buy something from my amazon wishlist for me
5) LEFT OUTER JOIN (SELECT linkId, COUNT(id) AS addresses FROM {$table_prefix}alc_address AS alc_address GROUP BY alc_address.linkId) AS alc_addresscount ON (alc_addresscount.linkId = alc_link.id) LEFT OUTER JOIN {$table_prefix}alc_address AS alc_defaultaddress ON (alc_defaultaddress.linkId = alc_link.id) AND (alc_defaultaddress.default = 'Yes') LEFT OUTER JOIN {$table_prefix}alc_redirectlog AS alc_redirectlog ON (alc_redirectlog.addressId = alc_address.id) GROUP BY alc_link.id ORDER BY alc_link.replacementOrder ASC"; $rows = $wpdb->get_results($query); foreach ($rows as $row) { $background = ''; if (!$row->addresses || !$row->hasDefault) { $background = "background: #FAEBD7;"; } ?>
Order Active Max Links Search Text URL Suffix nofollow new
window
addresses redirects
Order Active Max Links Search Text URL Suffix nofollow new
window
addresses redirects
Edit replacementOrder; ?> flags & ALC_ACTIVE) == ALC_ACTIVE) ? 'Yes' : 'No'; ?> maxReplacements; ?> searchText; ?> urlSuffix; ?>">urlSuffix; ?> flags & ALC_NOFOLLOW) == ALC_NOFOLLOW) ? 'Yes' : 'No'; ?> flags & ALC_OPENNEWWINDOW) == ALC_OPENNEWWINDOW) ? 'Yes' : 'No'; ?> addresses; ?> redirects; ?>
query("DELETE FROM {$table_prefix}alc_address WHERE id = $addressId"); // and now delete any entries in the redirect log table.. $wpdb->query("DELETE FROM {$table_prefix}alc_redirectlog WHERE addressId = $addressId"); $message = 'Address deleted.'; } // update an address? if (isset($_POST['update_address']) && check_admin_referer('alc_edit_address', '_wpnonce')) { // is this a default link ? if (isset($_POST['default'])) { // make sure that we dont end up with more than one default $wpdb->update($table_prefix . 'alc_address', array('default' => 'No'), array('linkId' => (int)$linkId)); } // prepare the data $where = array('id' => (int)$_POST['update_address']); $data = array('default' => isset($_POST['default']) ? 'Yes' : 'No', 'country' => $_POST['country'], 'address' => $_POST['address']); // update the record $wpdb->update($table_prefix . 'alc_address', $data, $where, array('%s'), array('%d')); $message = 'Address updated.'; } // create a new record ? if (isset($_POST['command']) && $_POST['command'] == 'new') { // validate data.... if (!strlen($_POST['urlsuffix'])) { $errors[] = 'Please provide a url suffix.'; } // check that the url suffix is unique if (!isSuffixUnique($_POST['urlsuffix'])) { $errors[] = 'Please provide a unique suffix.'; } // any errors ? if (!sizeof($errors)) { $flags = 0; //sanitise data if (isset($_POST['replacementactive'])) { $flags |= ALC_ACTIVE; } if (isset($_POST['countredirects'])) { $flags |= ALC_COUNTREDIRECTS; } if (isset($_POST['nofollow'])) { $flags |= ALC_NOFOLLOW; } if (isset($_POST['opennewwindow'])) { $flags |= ALC_OPENNEWWINDOW; } if (isset($_POST['casesensitive'])) { $flags |= ALC_CASESENSITIVE; } if (isset($_POST['showthismonthstats'])) { $flags |= ALC_SHOWTHISMONTHSTATS; } $titleText = $wpdb->escape($_POST['titletext']); $searchText = $wpdb->escape($_POST['searchtext']); $searchTextDelimiter = $wpdb->escape($_POST['searchtextdelimiter']); $urlSuffix = $wpdb->escape($_POST['urlsuffix']); $replacementOrder = (int)$_POST['replacementorder']; $maxReplacements = (int)$_POST['maxreplacements']; $redirectType = $_POST['redirecttype']; $data = array( 'flags' => $flags, 'titleText' => $titleText, 'searchText' => $searchText, 'searchTextDelimiter' => $searchTextDelimiter, 'urlSuffix' => $urlSuffix, 'replacementOrder' => $replacementOrder, 'maxReplacements' => $maxReplacements, 'redirectType' => $redirectType ); // perform the insert $wpdb->insert($table_prefix . 'alc_link', $data); $command = 'edit'; $linkId = $wpdb->insert_id; $message = 'New affiliate link added.'; } } // update record ? if (isset($_POST['command']) && $_POST['command'] == 'edit' && check_admin_referer('alc_link_options', '_wpnonce') && $linkId) { // validate data.... if (!strlen($_POST['urlsuffix'])) { $errors[] = 'Please provide a url suffix.'; } // check that the url suffix is unique if (!isSuffixUnique($_POST['urlsuffix'], $linkId)) { $errors[] = 'Please provide a unique suffix.'; } // any errors ? if (!sizeof($errors)) { $flags = 0; //sanitise data if (isset($_POST['replacementactive'])) { $flags |= ALC_ACTIVE; } if (isset($_POST['countredirects'])) { $flags |= ALC_COUNTREDIRECTS; } if (isset($_POST['nofollow'])) { $flags |= ALC_NOFOLLOW; } if (isset($_POST['opennewwindow'])) { $flags |= ALC_OPENNEWWINDOW; } if (isset($_POST['casesensitive'])) { $flags |= ALC_CASESENSITIVE; } if (isset($_POST['showthismonthstats'])) { $flags |= ALC_SHOWTHISMONTHSTATS; } $titleText = $wpdb->escape($_POST['titletext']); $searchText = $wpdb->escape($_POST['searchtext']); $searchTextDelimiter = $wpdb->escape($_POST['searchtextdelimiter']); $urlSuffix = $wpdb->escape($_POST['urlsuffix']); $cssClass = $wpdb->escape($_POST['cssclass']); $pageExceptions = $wpdb->escape($_POST['pageexceptions']); $postExceptions = $wpdb->escape($_POST['postexceptions']); $replacementOrder = (int)$_POST['replacementorder']; $maxReplacements = (int)$_POST['maxreplacements']; $redirectType = $_POST['redirecttype']; $data = array( 'flags' => $flags, 'titleText' => $titleText, 'searchText' => $searchText, 'searchTextDelimiter' => $searchTextDelimiter, 'urlSuffix' => $urlSuffix, 'cssClass' => $cssClass, 'pageExceptions' => $pageExceptions, 'postExceptions' => $postExceptions, 'replacementOrder' => $replacementOrder, 'maxReplacements' => $maxReplacements, 'redirectType' => $redirectType ); $where = array('id' => $linkId); // perform the insert $wpdb->update($table_prefix . 'alc_link', $data, $where); // if the redirect count check box is not checked, remove log entries if (!isset($_POST['countredirects'])) { $query = " DELETE {$table_prefix}alc_redirectlog FROM {$table_prefix}alc_redirectlog INNER JOIN {$table_prefix}alc_address ON ({$table_prefix}alc_address.id = {$table_prefix}alc_redirectlog.addressId) WHERE ({$table_prefix}alc_address.linkId = $linkId)"; $wpdb->query($query); } $message = 'Affiliate link updated.'; } } if ($command == 'edit' && $linkId) { $posturl = get_option('siteurl') . '/wp-admin/admin.php?page=affiliatelinkcloaker&edit=' . $linkId; $query = " SELECT id, flags, searchText, searchTextDelimiter, urlSuffix, cssClass, pageExceptions, postExceptions, replacementOrder, maxReplacements, redirectType FROM {$table_prefix}alc_link WHERE id = $linkId"; $row = $wpdb->get_row($query); $id = $row->id; $flags = $row->flags; $searchText = $row->searchText; $searchTextDelimiter = $row->searchTextDelimiter; $urlSuffix = $row->urlSuffix; $cssClass = $row->cssClass; $pageExceptions = $row->pageExceptions; $postExceptions = $row->postExceptions; $replacementOrder = $row->replacementOrder; $maxReplacements = $row->maxReplacements; $redirectType = $row->redirectType; } if ($command == 'new') { $posturl = get_option('siteurl') . '/wp-admin/admin.php?page=affiliatelinkcloaker&edit&new'; } // has the user created a new link record? if ($linkId) { $posturl = get_option('siteurl') . '/wp-admin/admin.php?page=affiliatelinkcloaker&edit=' . $linkId; } // validate address stuff if ($linkId) { $query = " SELECT COUNT(alc_address.id) AS addresses, (CASE WHEN alc_defaultaddress.id IS NULL THEN 0 ELSE 1 END) AS defaultAddress FROM {$table_prefix}alc_link AS alc_link LEFT OUTER JOIN {$table_prefix}alc_address AS alc_address ON (alc_address.linkId = alc_link.id) LEFT OUTER JOIN {$table_prefix}alc_address AS alc_defaultaddress ON (alc_defaultaddress.linkId = alc_link.id) AND (alc_defaultaddress.default = 'Yes') WHERE alc_link.id = $linkId GROUP BY alc_link.id"; $result = $wpdb->get_row($query); // have we got some addresses? if (($linkId == 0 && $command == 'new') || !$result->addresses) { $errors[] = "Please add at least one address."; } // do we have at least one default address? if ($command == 'new' || !$result->defaultAddress) { $errors[] = "Please make one of the addresses a default"; } } else { /* linkId must be zero if we're here. check if this is * for a new link... */ if ($command == 'new') { $errors[] = "Once you have saved this link, you will need to add at least one default address. Addresses can be added below the options once the link options have been saved."; } } ?>

Affiliate Link Options Back to affiliate links

' . $message . '

'; } if (sizeof($errors)) { echo '

' . implode('
', $errors) . '

'; } ?>

Options

Debug Need some help with this link? Click on the debug link to the left. This will download a text file with the configuration of the link and addresses. Copy and paste the contents of the file with your specific issue at Brewsterware forum
/>
This enables the replacement of text in content with the cloaked affiliate links.
Page exceptions
Enter a list of page ids separated by commas of pages that you do not want to add affiliate links to.
Post exceptions
Enter a list of post ids separated by commas of posts that you do not want to add affiliate links to.
Replacement Order
This is the order that the replacements are done.
Max Replacements
Maximum number of replacements per post. Setting this to zero will cause all keyword occurances to be replaced.
Search Text
This is the text that is searched for in the article content. Seperate multiple keywords/phrases with the delimeter specified below.
Search Text Delimiter
This is the delimiter that seperates multiple keywords. This should be left empty if you are only specifying one keyword/phrase above.
/>
This defines whether the searching of the keyword/phrase should be case sensitive. This defaults to true.
Cloaked URL suffix
This text will be placed at the end of the cloaked url like this: /recommends/cloaked_url_suffix. This suffix must be unique.
CSS Class
The link will use this css class.
/>
This enables the counting of redirects that are performed.
/>
/>
This puts a no follow tag on the link.
/>
This causes the link to open in a new browser window.

These are http status codes - documentation for them can be found here. This will default to a 302 redirect. If this is set to a 301 redirect, most modern browsers will cache the redirect and any changes to the addresses below will not show for a specific user if they have already followed the link.


Addresses " class="button add-new-h2">Add New

$linkId); $wpdb->insert($table_prefix . 'alc_address', $data, '%d'); } ?> get_results($query); $forceDefault = (sizeof($rows) == 1); foreach ($rows as $row) { ?>
escape($suffix); $id = (int)$id; $query = " SELECT COUNT(id) AS suffixCount FROM {$table_prefix}alc_link WHERE (urlSuffix = '$escapedSuffix') AND (id <> $id)"; $row = $wpdb->get_row($query); return ($row->suffixCount == 0) ? true : false; } function squashText($text, $maxLength, $seperator, $seperatorPos) { $textLen = strlen($text); // do we need to process the text ? if ($textLen < $maxLength) { return $text; } $seperatorLen = strlen($seperator); return substr($text, 0, $textLen - $seperatorLen - $seperatorPos) . $seperator . substr($text, $textLen - $seperatorPos); } function redirectTypeCombo($name, $default = '') { $types = array(0 => '300', '301', '302', '303', '307'); echo "'; } function countrycombo($name, $default = '') { global $wpdb; /* if the region detect plugin is not installed * just display a text box */ if (!is_plugin_active('regiondetect/regiondetect.php')) { echo ''; return; } $query = " SELECT countryCode, countryName FROM {$wpdb->base_prefix}rd_countrynames ORDER BY countryName ASC"; $rows = $wpdb->get_results($query); echo "'; } ?>