Changeset 3346262
- Timestamp:
- 08/18/2025 09:11:09 AM (8 months ago)
- Location:
- linkgenius
- Files:
-
- 16 edited
- 3 copied
-
tags/1.2.3 (copied) (copied from linkgenius/trunk)
-
tags/1.2.3/includes/CPT.php (modified) (8 diffs)
-
tags/1.2.3/includes/Editor.php (modified) (5 diffs)
-
tags/1.2.3/includes/Importer.php (modified) (5 diffs)
-
tags/1.2.3/includes/LinkLocator.php (modified) (2 diffs)
-
tags/1.2.3/includes/Metabox.php (modified) (4 diffs)
-
tags/1.2.3/languages/linkgenius-fallback.mo (modified) (previous)
-
tags/1.2.3/languages/linkgenius-fallback.po (modified) (1 diff)
-
tags/1.2.3/linkgenius.php (copied) (copied from linkgenius/trunk/linkgenius.php) (1 diff)
-
tags/1.2.3/readme.txt (copied) (copied from linkgenius/trunk/readme.txt) (8 diffs)
-
trunk/includes/CPT.php (modified) (8 diffs)
-
trunk/includes/Editor.php (modified) (5 diffs)
-
trunk/includes/Importer.php (modified) (5 diffs)
-
trunk/includes/LinkLocator.php (modified) (2 diffs)
-
trunk/includes/Metabox.php (modified) (4 diffs)
-
trunk/languages/linkgenius-fallback.mo (modified) (previous)
-
trunk/languages/linkgenius-fallback.po (modified) (1 diff)
-
trunk/linkgenius.php (modified) (1 diff)
-
trunk/readme.txt (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
linkgenius/tags/1.2.3/includes/CPT.php
r3174171 r3346262 41 41 function register_linkgenius_link_post_type() { 42 42 $labels = array( 43 'name' => __( 'LinkGenius Links', ' text-domain' ),44 'singular_name' => __( 'LinkGenius Link', ' text-domain' ),45 'menu_name' => __( 'LinkGenius', ' text-domain' ),46 'name_admin_bar' => __( 'LinkGenius Link', ' text-domain' ),47 'add_new' => __( 'Add New', ' text-domain' ),48 'add_new_item' => __( 'Add New LinkGenius Link', ' text-domain' ),49 'new_item' => __( 'New LinkGenius Link', ' text-domain' ),50 'edit_item' => __( 'Edit LinkGenius Link', ' text-domain' ),51 'view_item' => __( 'View LinkGenius Link', ' text-domain' ),52 'all_items' => __( 'All Links', ' text-domain' ),53 'search_items' => __( 'Search LinkGenius Links', ' text-domain' ),54 'parent_item_colon' => __( 'Parent LinkGenius Links:', ' text-domain' ),55 'not_found' => __( 'No LinkGenius Links found.', ' text-domain' ),56 'not_found_in_trash' => __( 'No LinkGenius Links found in Trash.', ' text-domain' ),43 'name' => __( 'LinkGenius Links', 'linkgenius' ), 44 'singular_name' => __( 'LinkGenius Link', 'linkgenius' ), 45 'menu_name' => __( 'LinkGenius', 'linkgenius' ), 46 'name_admin_bar' => __( 'LinkGenius Link', 'linkgenius' ), 47 'add_new' => __( 'Add New', 'linkgenius' ), 48 'add_new_item' => __( 'Add New LinkGenius Link', 'linkgenius' ), 49 'new_item' => __( 'New LinkGenius Link', 'linkgenius' ), 50 'edit_item' => __( 'Edit LinkGenius Link', 'linkgenius' ), 51 'view_item' => __( 'View LinkGenius Link', 'linkgenius' ), 52 'all_items' => __( 'All Links', 'linkgenius' ), 53 'search_items' => __( 'Search LinkGenius Links', 'linkgenius' ), 54 'parent_item_colon' => __( 'Parent LinkGenius Links:', 'linkgenius' ), 55 'not_found' => __( 'No LinkGenius Links found.', 'linkgenius' ), 56 'not_found_in_trash' => __( 'No LinkGenius Links found in Trash.', 'linkgenius' ), 57 57 ); 58 58 $role = Settings::instance()->get_settings()['general_role']; … … 101 101 function register_linkgenius_categories() { 102 102 $labels = array( 103 'name' => __( 'Categories', ' text-domain' ),104 'singular_name' => __( 'Category', ' text-domain' ),105 'menu_name' => __( 'Categories', ' text-domain' ),106 'all_items' => __( 'All Categories', ' text-domain' ),107 'edit_item' => __( 'Edit Category', ' text-domain' ),108 'view_item' => __( 'View Category', ' text-domain' ),109 'update_item' => __( 'Update Category', ' text-domain' ),110 'add_new_item' => __( 'Add New Category', ' text-domain' ),111 'new_item_name' => __( 'New Category Name', ' text-domain' ),112 'parent_item' => __( 'Parent Category', ' text-domain' ),113 'parent_item_colon' => __( 'Parent Category:', ' text-domain' ),114 'search_items' => __( 'Search Categories', ' text-domain' ),115 'popular_items' => __( 'Popular Categories', ' text-domain' ),116 'separate_items_with_commas' => __( 'Separate categories with commas', ' text-domain' ),117 'add_or_remove_items' => __( 'Add or remove categories', ' text-domain' ),118 'choose_from_most_used' => __( 'Choose from the most used categories', ' text-domain' ),119 'not_found' => __( 'No categories found.', ' text-domain' ),103 'name' => __( 'Categories', 'linkgenius' ), 104 'singular_name' => __( 'Category', 'linkgenius' ), 105 'menu_name' => __( 'Categories', 'linkgenius' ), 106 'all_items' => __( 'All Categories', 'linkgenius' ), 107 'edit_item' => __( 'Edit Category', 'linkgenius' ), 108 'view_item' => __( 'View Category', 'linkgenius' ), 109 'update_item' => __( 'Update Category', 'linkgenius' ), 110 'add_new_item' => __( 'Add New Category', 'linkgenius' ), 111 'new_item_name' => __( 'New Category Name', 'linkgenius' ), 112 'parent_item' => __( 'Parent Category', 'linkgenius' ), 113 'parent_item_colon' => __( 'Parent Category:', 'linkgenius' ), 114 'search_items' => __( 'Search Categories', 'linkgenius' ), 115 'popular_items' => __( 'Popular Categories', 'linkgenius' ), 116 'separate_items_with_commas' => __( 'Separate categories with commas', 'linkgenius' ), 117 'add_or_remove_items' => __( 'Add or remove categories', 'linkgenius' ), 118 'choose_from_most_used' => __( 'Choose from the most used categories', 'linkgenius' ), 119 'not_found' => __( 'No categories found.', 'linkgenius' ), 120 120 ); 121 121 … … 145 145 function register_linkgenius_tags() { 146 146 $labels = array( 147 'name' => __( 'Tags', ' text-domain' ),148 'singular_name' => __( 'Tag', ' text-domain' ),149 'menu_name' => __( 'Tags', ' text-domain' ),150 'all_items' => __( 'All Tags', ' text-domain' ),151 'edit_item' => __( 'Edit Tag', ' text-domain' ),152 'view_item' => __( 'View Tag', ' text-domain' ),153 'update_item' => __( 'Update Tag', ' text-domain' ),154 'add_new_item' => __( 'Add New Tag', ' text-domain' ),155 'new_item_name' => __( 'New Tag Name', ' text-domain' ),156 'parent_item' => __( 'Parent Tag', ' text-domain' ),157 'parent_item_colon' => __( 'Parent Tag:', ' text-domain' ),158 'search_items' => __( 'Search Tags', ' text-domain' ),159 'popular_items' => __( 'Popular Tags', ' text-domain' ),160 'separate_items_with_commas' => __( 'Separate tags with commas', ' text-domain' ),161 'add_or_remove_items' => __( 'Add or remove tags', ' text-domain' ),162 'choose_from_most_used' => __( 'Choose from the most used tags', ' text-domain' ),163 'not_found' => __( 'No tags found.', ' text-domain' ),147 'name' => __( 'Tags', 'linkgenius' ), 148 'singular_name' => __( 'Tag', 'linkgenius' ), 149 'menu_name' => __( 'Tags', 'linkgenius' ), 150 'all_items' => __( 'All Tags', 'linkgenius' ), 151 'edit_item' => __( 'Edit Tag', 'linkgenius' ), 152 'view_item' => __( 'View Tag', 'linkgenius' ), 153 'update_item' => __( 'Update Tag', 'linkgenius' ), 154 'add_new_item' => __( 'Add New Tag', 'linkgenius' ), 155 'new_item_name' => __( 'New Tag Name', 'linkgenius' ), 156 'parent_item' => __( 'Parent Tag', 'linkgenius' ), 157 'parent_item_colon' => __( 'Parent Tag:', 'linkgenius' ), 158 'search_items' => __( 'Search Tags', 'linkgenius' ), 159 'popular_items' => __( 'Popular Tags', 'linkgenius' ), 160 'separate_items_with_commas' => __( 'Separate tags with commas', 'linkgenius' ), 161 'add_or_remove_items' => __( 'Add or remove tags', 'linkgenius' ), 162 'choose_from_most_used' => __( 'Choose from the most used tags', 'linkgenius' ), 163 'not_found' => __( 'No tags found.', 'linkgenius' ), 164 164 ); 165 165 … … 208 208 if (!empty($categories)) { 209 209 echo '<select name="' . LINKGENIUS_TYPE_CATEGORY . '" id="' . LINKGENIUS_TYPE_CATEGORY . '" class="postform">'; 210 echo '<option value="">' . __('Show All Categories', 'text-domain') . '</option>';210 echo '<option value="">' . esc_html__('Show All Categories', 'linkgenius') . '</option>'; 211 211 foreach ($categories as $category) { 212 $selected = (($_GET[LINKGENIUS_TYPE_CATEGORY]??'') == $category->slug) ? 'selected' : ''; 213 echo '<option value="' . $category->slug . '" '.$selected.'>' . $category->name . '</option>'; 212 echo '<option value="' . esc_attr($category->slug) . '" '.selected($_GET[LINKGENIUS_TYPE_CATEGORY] ?? '', $category->slug, false).'>' . esc_html($category->name) . '</option>'; 214 213 } 215 214 echo '</select>'; … … 219 218 if (!empty($tags)) { 220 219 echo '<select name="' . LINKGENIUS_TYPE_TAG . '" id="' . LINKGENIUS_TYPE_TAG . '" class="postform">'; 221 echo '<option value="">' . __('Show All Tags', 'text-domain') . '</option>';220 echo '<option value="">' . esc_html__('Show All Tags', 'linkgenius') . '</option>'; 222 221 foreach ($tags as $tag) { 223 $selected = (($_GET[LINKGENIUS_TYPE_TAG]??'') == $tag->slug) ? 'selected' : ''; 224 echo '<option value="' . $tag->slug . '" '.$selected.'>' . $tag->name . '</option>'; 222 echo '<option value="' . esc_attr($tag->slug) . '" '.selected($_GET[LINKGENIUS_TYPE_TAG] ?? '', $tag->slug, false).'>' . esc_html($tag->name) . '</option>'; 225 223 } 226 224 echo '</select>'; … … 270 268 function add_linkgenius_link_columns($columns) { 271 269 $offset = 2; 272 return array_slice($columns, 0, $offset, true) + array('link'=> __('Target URL' )) + array_slice($columns, $offset, count($columns) - 1, true);270 return array_slice($columns, 0, $offset, true) + array('link'=> __('Target URL', 'linkgenius')) + array_slice($columns, $offset, count($columns) - 1, true); 273 271 } 274 272 … … 286 284 function add_shortcode_column( $columns ) { 287 285 $offset = 2; 288 return array_slice($columns, 0, $offset, true) + array("shortcode" => __("Shortcode" )) + array_slice($columns, $offset, count($columns) - 1, true);286 return array_slice($columns, 0, $offset, true) + array("shortcode" => __("Shortcode", 'linkgenius')) + array_slice($columns, $offset, count($columns) - 1, true); 289 287 } 290 288 … … 323 321 <td><input type="text" id="%1$s-shortcode" class="linkgenius-copy-shortcode" name="shortcode" value="%2$s" onclick="this.select()" readonly></td> 324 322 </tr> 325 </table>', $type, esc_attr($shortcode));323 </table>', esc_attr($type), esc_attr($shortcode)); 326 324 } 327 325 -
linkgenius/tags/1.2.3/includes/Editor.php
r3132032 r3346262 61 61 $post = null; 62 62 if (! defined('DOING_AJAX') || ! DOING_AJAX) { 63 wp_send_json_error(__('Invalid AJAX call' ));63 wp_send_json_error(__('Invalid AJAX call', 'linkgenius')); 64 64 } 65 65 elseif( isset( $_GET[ 'linkgenius_id' ] ) ){ … … 67 67 $post = get_post($id); 68 68 if($post === null || $post->post_type != LINKGENIUS_TYPE_LINK) { 69 wp_send_json_error( __( 'Invalid Id' ) );69 wp_send_json_error( __( 'Invalid Id', 'linkgenius' ) ); 70 70 } 71 71 } … … 73 73 $post = get_post(url_to_postid(esc_url_raw($_GET['linkgenius_url']))); 74 74 if($post === null || $post->post_type != LINKGENIUS_TYPE_LINK) { 75 wp_send_json_error( __( 'Invalid URL' ) );75 wp_send_json_error( __( 'Invalid URL', 'linkgenius') ); 76 76 } 77 77 } 78 78 else { 79 wp_send_json_error( __( 'Missing required post data' ) );79 wp_send_json_error( __( 'Missing required post data', 'linkgenius' ) ); 80 80 } 81 81 82 82 83 83 if($post == null || $post->post_type != LINKGENIUS_TYPE_LINK) { 84 wp_send_json_error( __( 'Invalid Post Parameters' ) );84 wp_send_json_error( __( 'Invalid Post Parameters', 'linkgenius' ) ); 85 85 } 86 86 wp_send_json_success(array( … … 94 94 public function search_linkgenius_links() { 95 95 if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ){ 96 wp_send_json_error(__('Invalid AJAX call' ));96 wp_send_json_error(__('Invalid AJAX call', 'linkgenius')); 97 97 } 98 98 elseif ( ! isset( $_GET[ 'keyword' ] ) ) { 99 wp_send_json_error( __( 'Missing required post data' ));99 wp_send_json_error( __( 'Missing required post data', 'linkgenius' )); 100 100 } 101 101 else { … … 132 132 function preview_linkgenius_taxonomy() { 133 133 if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) { 134 wp_send_json_error(__('Invalid AJAX call' ));134 wp_send_json_error(__('Invalid AJAX call', 'linkgenius')); 135 135 } 136 136 elseif ( ! isset( $_GET[ 'taxonomy'] ) || !isset($_GET['item_slug']) || !isset($_GET['template']) || !isset($_GET['sort'])) { 137 wp_send_json_error( __( 'Missing required post data' ));137 wp_send_json_error( __( 'Missing required post data', 'linkgenius' )); 138 138 } 139 139 elseif ( $_GET['taxonomy'] !== 'category' && $_GET['taxonomy'] !== 'tag' ) { 140 wp_send_json_error( __( 'Invalid taxonomy' ) );140 wp_send_json_error( __( 'Invalid taxonomy', 'linkgenius' ) ); 141 141 } 142 142 elseif ( $_GET['sort'] !== 'order' && $_GET['sort'] !== 'title') { 143 wp_send_json_error( __( 'Invalid sort' ) );143 wp_send_json_error( __( 'Invalid sort', 'linkgenius' ) ); 144 144 } 145 145 else { -
linkgenius/tags/1.2.3/includes/Importer.php
r2993080 r3346262 92 92 93 93 if(sizeof($items) <= 0) : 94 _e("It looks like the uploaded file could not be parsed or did not contain any links. Please check the file and try again.", "linkgenius");94 esc_html_e("It looks like the uploaded file could not be parsed or did not contain any links. Please check the file and try again.", "linkgenius"); 95 95 else: 96 96 ?><div style="overflow-x:scroll"> … … 98 98 <thead> 99 99 <tr> 100 <th><?php echo implode("</th><th>", array_map(fn($v) => preg_replace("/^[a-z]+_/", "", $v) ,$headers)) ?></th>100 <th><?php echo implode("</th><th>", array_map(fn($v) => esc_html(preg_replace("/^[a-z]+_/", "", $v)) ,$headers)) ?></th> 101 101 </tr> 102 102 </thead> … … 104 104 <?php foreach ($items as $item) : ?> 105 105 <tr> 106 <td><? =implode('</td><td>', array_map(function($header) use ($item) {107 return is_array($item[$header]??"")106 <td><?php echo implode('</td><td>', array_map(function($header) use ($item) { 107 return esc_html(is_array($item[$header]??"") 108 108 ? implode(", \n", array_map(fn($key, $value) => "$key => $value", array_keys($item[$header]), $item[$header])) 109 : ($item[$header]??'') ;109 : ($item[$header]??'')); 110 110 }, $headers)) ?></td> 111 111 </tr> … … 131 131 'label_cb' => '', 132 132 'options' => array( 133 'discard' => __( 'Discard', ' cmb2' ),134 'import' => __( 'Import', ' cmb2' ),133 'discard' => __( 'Discard', 'linkgenius' ), 134 'import' => __( 'Import', 'linkgenius' ), 135 135 ), 136 136 'before' => fn($v) => $extra, … … 149 149 $cmb->add_field( array( 150 150 'name' => __('CSV or XML file', 'linkgenius'), 151 'desc' => sprintf(__('The file containing the link data.' )),151 'desc' => sprintf(__('The file containing the link data.', 'linkgenius')), 152 152 'id' => 'linkgenius_import_file', 153 153 'type' => 'text', -
linkgenius/tags/1.2.3/includes/LinkLocator.php
r3132032 r3346262 85 85 $response .= implode("", array_filter($rows))."</table>"; 86 86 } 87 87 $response = wp_kses($response, array( 88 'table' => array('class' => true), 89 'tr' => array(), 90 'th' => array(), 91 'td' => array('class' => true), 92 'a' => array('href' => true, 'class' => true), 93 'span' => array('class' => true), 94 'p' => array(), 95 )); 88 96 // Return the results as JSON 89 echo json_encode($response);97 echo wp_json_encode($response); 90 98 wp_die(); 91 99 } … … 101 109 return ""; 102 110 } 103 return "<tr><td>". $result->ID."</td>104 <td>". $result->post_title."</td>105 <td>". $result->post_type."</td>111 return "<tr><td>".intval($result->ID)."</td> 112 <td>".esc_html($result->post_title)."</td> 113 <td>".esc_html($result->post_type)."</td> 106 114 <td class=\"types\">".implode(", ", array_keys($types))."</td> 107 115 <td><a href='".get_edit_post_link($result->ID)."'><span class='dashicons dashicons-edit'></span></a></td> -
linkgenius/tags/1.2.3/includes/Metabox.php
r3132032 r3346262 6 6 { 7 7 public function cmb2_render_callback_for_clicks( $field, $escaped_value, $object_id, $object_type, $field_type_object ) { 8 ?><span id="clicks_label"><?php echo $escaped_value?></span>9 <a href='#' id='reset_clicks'><?php _e("Reset Clicks", "linkgenius")?></a>8 ?><span id="clicks_label"><?php echo esc_html($escaped_value); ?></span> 9 <a href='#' id='reset_clicks'><?php esc_html_e("Reset Clicks", "linkgenius")?></a> 10 10 <?php 11 11 } … … 13 13 public function cmb2_render_callback_for_link_locations( $field, $escaped_value, $object_id, $object_type, $field_type_object ) { 14 14 ?> 15 <a href='#' class="button-primary" id='search_link_locations'><?php _e("Search Link in Content", "linkgenius")?></a>15 <a href='#' class="button-primary" id='search_link_locations'><?php esc_html_e("Search Link in Content", "linkgenius")?></a> 16 16 <div id="link_locations"></div> 17 17 <?php … … 22 22 23 23 24 echo '<select ' . $field_type_object->concat_attrs( array( 'name' => $field_type_object->_name(), 'id' => $field_type_object->_id() ) ) . '>';24 echo '<select ' . $field_type_object->concat_attrs( array( 'name' => esc_attr($field_type_object->_name()), 'id' => esc_attr($field_type_object->_id()) ) ) . '>'; 25 25 26 26 foreach ( $options as $option_key => $option_value ) { 27 27 $disabled = preg_match("/_pro$/", $option_key) ? ' disabled="disabled"' : ''; 28 28 $escaped_value = $field_type_object->field->escaped_value(); 29 echo '<option value="' . $option_key . '"' . selected( $field_type_object->field->escaped_value(), $option_key, false ) . $disabled . '>' . $option_value. '</option>';29 echo '<option value="' . esc_attr($option_key) . '"' . selected( $field_type_object->field->escaped_value(), $option_key, false ) . $disabled . '>' . esc_html($option_value) . '</option>'; 30 30 } 31 31 … … 64 64 'type' => 'select', 'options' => 65 65 array( 66 /* translators: %s is the default value, either __('Enabled', 'linkgenius') or __('Disabled', 'linkgenius') */ 66 67 'default' => sprintf(__('Default (%s)', 'linkgenius'), $default ? __('Enabled', 'linkgenius') : __('Disabled', 'linkgenius')), 67 68 '1' => __('Enabled', 'linkgenius'), -
linkgenius/tags/1.2.3/languages/linkgenius-fallback.po
r3132032 r3346262 659 659 #: includes/Metabox.php:414 660 660 msgid "Intro link locator" 661 msgstr " "661 msgstr "Check one location where your link appears in your content. To view the full list <strong><a href=\"https://all-affiliates.com/linkgenius/pro?utm_source=plugin&utm_medium=editor&utm_campaign=locator\" target=\"_blank\">get LinkGenius Pro</a></strong>." 662 662 663 663 #: includes/Metabox.php:481 -
linkgenius/tags/1.2.3/linkgenius.php
r3341954 r3346262 4 4 Plugin URI: https://all-affiliates.com/linkgenius/ 5 5 Description: LinkGenius is a powerful (affiliate) link management plugin. With LinkGenius, you can effortlessly organize, optimize, and track your (affiliate) links, unlocking a new level of efficiency. 6 Version: 1.2. 26 Version: 1.2.3 7 7 Author: all-affiliates.com 8 8 Author URI: https://all-affiliates.com -
linkgenius/tags/1.2.3/readme.txt
r3341954 r3346262 1 === LinkGenius - Affiliate Link Manager and Link Shortener Plugin===1 === LinkGenius - Affiliate Link Manager and Link Shortener === 2 2 Contributors: allaffiliates 3 3 Tags: affiliate links, affiliate link manager, link branding, affiliate disclosure, link shortener … … 6 6 Tested up to: 6.8 7 7 Requires PHP: 7.4 8 Stable tag: 1.2. 28 Stable tag: 1.2.3 9 9 License: GPL2 10 10 License URI: http://www.gnu.org/licenses/gpl-2.0.html 11 11 12 LinkGenius is an advanced affiliate link manager. Easily brand, disclose, tag, or categorize your affiliate links. Customize appearance, manage rel attributes, and more! 12 Affiliate link manager plugin to cloak, brand, disclose, track, replace and organize affiliate links with SEO-friendly redirects and tools. 13 13 14 14 == Description == … … 31 31 Manage your affiliate links with ease using LinkGenius. Add, edit, and delete affiliate links effortlessly, keeping them organized and accessible. Manage your affiliate link lists by categorizing and tagging your links. 32 32 33 = Easily Link sto Posts or Pages =34 Display individual links or a list sof affiliate links based on tags or categories to provide a cohesive representation of related links. Customize the layout and order of your list. LinkGenius supports creating links or link lists via multiple blocks, shortcodes, or by simply selecting text in the block editor.33 = Easily Link to Posts or Pages = 34 Display individual links or a list of affiliate links based on tags or categories to provide a cohesive representation of related links. Customize the layout and order of your list. LinkGenius supports creating links or link lists via multiple blocks, shortcodes, or by simply selecting text in the block editor. 35 35 36 36 = Find which posts or pages contain a specific link = … … 38 38 39 39 = Customizable Link Appearance = 40 Customize the appearance of your affiliate links. Add classes, or make a link open in a new window. Add UGC and sponsored attributes, or defined your own custom rel attrib tues.40 Customize the appearance of your affiliate links. Add classes, or make a link open in a new window. Add UGC and sponsored attributes, or defined your own custom rel attributes. 41 41 42 42 = Affiliate Disclosure = … … 62 62 - **Device based redirects:** Redirect users to alternative URLs, based on their browser, operating system, or other information in their user agent. 63 63 64 - **Link tracking:** Track the performance of your affiliate links with ease, using LinkGenius's link tracking capabilities powered by Google Analytics. Gain valuable insights into link performance and optimize your strategy accordingly. The server-side Tracking option allows you to even track clicks from directly from social media.64 - **Link tracking:** Track the performance of your affiliate links with ease, using LinkGenius's link tracking capabilities powered by Google Analytics. Gain valuable insights into link performance and optimize your strategy accordingly. The server-side tracking option allows you to even track clicks from directly from social media. 65 65 66 66 - **Commission tracking:** Track the commission you earn from your affiliate links by using commission postback. Do not only track the clicks but also the commission you earn from them. … … 69 69 70 70 == Installation == 71 Minimum requirements: WordPress 6.0 or higher, PHP 7.4 or higher. Plugin relies on WordPress permalinks for redirect functionality, ensure they are enabled. 71 72 72 73 ### Install LinkGenius from within WordPress … … 87 88 88 89 After installing and activating LinkGenius, navigate to the 'LinkGenius' menu in your WordPress dashboard. From there, you can easily add, edit, and delete your affiliate links. 90 91 = How do I use LinkGenius blocks and shortcodes? = 92 93 You can insert affiliate links or lists using blocks or shortcodes: 94 95 - Block - Use the "LinkGenius Link" block to add a single link, or the "LinkGenius Link List" block to show a list. 96 - Shortcode - [linkgenius-link id="123" target="_blank" rel="sponsored"] adds one link. 97 - List shortcode - [linkgenius-list category="shoes" order="ASC"] outputs all links from a category or tag. 98 99 Supported attributes include: id, category, tag, target, rel, and class. Combine attributes to customize appearance and behavior. 89 100 90 101 = Can I customize the appearance of my affiliate links? = … … 117 128 118 129 == Changelog == 130 = 1.2.3 = 131 - Security enhancements 132 - Translation improvements 133 119 134 = 1.2.2 = 120 135 - Updated readme.txt to remove "Best" and #1 from files in order to be compliant with guidelines 121 136 - Tested on WordPress 6.8 122 123 137 124 138 = 1.2.1 = -
linkgenius/trunk/includes/CPT.php
r3174171 r3346262 41 41 function register_linkgenius_link_post_type() { 42 42 $labels = array( 43 'name' => __( 'LinkGenius Links', ' text-domain' ),44 'singular_name' => __( 'LinkGenius Link', ' text-domain' ),45 'menu_name' => __( 'LinkGenius', ' text-domain' ),46 'name_admin_bar' => __( 'LinkGenius Link', ' text-domain' ),47 'add_new' => __( 'Add New', ' text-domain' ),48 'add_new_item' => __( 'Add New LinkGenius Link', ' text-domain' ),49 'new_item' => __( 'New LinkGenius Link', ' text-domain' ),50 'edit_item' => __( 'Edit LinkGenius Link', ' text-domain' ),51 'view_item' => __( 'View LinkGenius Link', ' text-domain' ),52 'all_items' => __( 'All Links', ' text-domain' ),53 'search_items' => __( 'Search LinkGenius Links', ' text-domain' ),54 'parent_item_colon' => __( 'Parent LinkGenius Links:', ' text-domain' ),55 'not_found' => __( 'No LinkGenius Links found.', ' text-domain' ),56 'not_found_in_trash' => __( 'No LinkGenius Links found in Trash.', ' text-domain' ),43 'name' => __( 'LinkGenius Links', 'linkgenius' ), 44 'singular_name' => __( 'LinkGenius Link', 'linkgenius' ), 45 'menu_name' => __( 'LinkGenius', 'linkgenius' ), 46 'name_admin_bar' => __( 'LinkGenius Link', 'linkgenius' ), 47 'add_new' => __( 'Add New', 'linkgenius' ), 48 'add_new_item' => __( 'Add New LinkGenius Link', 'linkgenius' ), 49 'new_item' => __( 'New LinkGenius Link', 'linkgenius' ), 50 'edit_item' => __( 'Edit LinkGenius Link', 'linkgenius' ), 51 'view_item' => __( 'View LinkGenius Link', 'linkgenius' ), 52 'all_items' => __( 'All Links', 'linkgenius' ), 53 'search_items' => __( 'Search LinkGenius Links', 'linkgenius' ), 54 'parent_item_colon' => __( 'Parent LinkGenius Links:', 'linkgenius' ), 55 'not_found' => __( 'No LinkGenius Links found.', 'linkgenius' ), 56 'not_found_in_trash' => __( 'No LinkGenius Links found in Trash.', 'linkgenius' ), 57 57 ); 58 58 $role = Settings::instance()->get_settings()['general_role']; … … 101 101 function register_linkgenius_categories() { 102 102 $labels = array( 103 'name' => __( 'Categories', ' text-domain' ),104 'singular_name' => __( 'Category', ' text-domain' ),105 'menu_name' => __( 'Categories', ' text-domain' ),106 'all_items' => __( 'All Categories', ' text-domain' ),107 'edit_item' => __( 'Edit Category', ' text-domain' ),108 'view_item' => __( 'View Category', ' text-domain' ),109 'update_item' => __( 'Update Category', ' text-domain' ),110 'add_new_item' => __( 'Add New Category', ' text-domain' ),111 'new_item_name' => __( 'New Category Name', ' text-domain' ),112 'parent_item' => __( 'Parent Category', ' text-domain' ),113 'parent_item_colon' => __( 'Parent Category:', ' text-domain' ),114 'search_items' => __( 'Search Categories', ' text-domain' ),115 'popular_items' => __( 'Popular Categories', ' text-domain' ),116 'separate_items_with_commas' => __( 'Separate categories with commas', ' text-domain' ),117 'add_or_remove_items' => __( 'Add or remove categories', ' text-domain' ),118 'choose_from_most_used' => __( 'Choose from the most used categories', ' text-domain' ),119 'not_found' => __( 'No categories found.', ' text-domain' ),103 'name' => __( 'Categories', 'linkgenius' ), 104 'singular_name' => __( 'Category', 'linkgenius' ), 105 'menu_name' => __( 'Categories', 'linkgenius' ), 106 'all_items' => __( 'All Categories', 'linkgenius' ), 107 'edit_item' => __( 'Edit Category', 'linkgenius' ), 108 'view_item' => __( 'View Category', 'linkgenius' ), 109 'update_item' => __( 'Update Category', 'linkgenius' ), 110 'add_new_item' => __( 'Add New Category', 'linkgenius' ), 111 'new_item_name' => __( 'New Category Name', 'linkgenius' ), 112 'parent_item' => __( 'Parent Category', 'linkgenius' ), 113 'parent_item_colon' => __( 'Parent Category:', 'linkgenius' ), 114 'search_items' => __( 'Search Categories', 'linkgenius' ), 115 'popular_items' => __( 'Popular Categories', 'linkgenius' ), 116 'separate_items_with_commas' => __( 'Separate categories with commas', 'linkgenius' ), 117 'add_or_remove_items' => __( 'Add or remove categories', 'linkgenius' ), 118 'choose_from_most_used' => __( 'Choose from the most used categories', 'linkgenius' ), 119 'not_found' => __( 'No categories found.', 'linkgenius' ), 120 120 ); 121 121 … … 145 145 function register_linkgenius_tags() { 146 146 $labels = array( 147 'name' => __( 'Tags', ' text-domain' ),148 'singular_name' => __( 'Tag', ' text-domain' ),149 'menu_name' => __( 'Tags', ' text-domain' ),150 'all_items' => __( 'All Tags', ' text-domain' ),151 'edit_item' => __( 'Edit Tag', ' text-domain' ),152 'view_item' => __( 'View Tag', ' text-domain' ),153 'update_item' => __( 'Update Tag', ' text-domain' ),154 'add_new_item' => __( 'Add New Tag', ' text-domain' ),155 'new_item_name' => __( 'New Tag Name', ' text-domain' ),156 'parent_item' => __( 'Parent Tag', ' text-domain' ),157 'parent_item_colon' => __( 'Parent Tag:', ' text-domain' ),158 'search_items' => __( 'Search Tags', ' text-domain' ),159 'popular_items' => __( 'Popular Tags', ' text-domain' ),160 'separate_items_with_commas' => __( 'Separate tags with commas', ' text-domain' ),161 'add_or_remove_items' => __( 'Add or remove tags', ' text-domain' ),162 'choose_from_most_used' => __( 'Choose from the most used tags', ' text-domain' ),163 'not_found' => __( 'No tags found.', ' text-domain' ),147 'name' => __( 'Tags', 'linkgenius' ), 148 'singular_name' => __( 'Tag', 'linkgenius' ), 149 'menu_name' => __( 'Tags', 'linkgenius' ), 150 'all_items' => __( 'All Tags', 'linkgenius' ), 151 'edit_item' => __( 'Edit Tag', 'linkgenius' ), 152 'view_item' => __( 'View Tag', 'linkgenius' ), 153 'update_item' => __( 'Update Tag', 'linkgenius' ), 154 'add_new_item' => __( 'Add New Tag', 'linkgenius' ), 155 'new_item_name' => __( 'New Tag Name', 'linkgenius' ), 156 'parent_item' => __( 'Parent Tag', 'linkgenius' ), 157 'parent_item_colon' => __( 'Parent Tag:', 'linkgenius' ), 158 'search_items' => __( 'Search Tags', 'linkgenius' ), 159 'popular_items' => __( 'Popular Tags', 'linkgenius' ), 160 'separate_items_with_commas' => __( 'Separate tags with commas', 'linkgenius' ), 161 'add_or_remove_items' => __( 'Add or remove tags', 'linkgenius' ), 162 'choose_from_most_used' => __( 'Choose from the most used tags', 'linkgenius' ), 163 'not_found' => __( 'No tags found.', 'linkgenius' ), 164 164 ); 165 165 … … 208 208 if (!empty($categories)) { 209 209 echo '<select name="' . LINKGENIUS_TYPE_CATEGORY . '" id="' . LINKGENIUS_TYPE_CATEGORY . '" class="postform">'; 210 echo '<option value="">' . __('Show All Categories', 'text-domain') . '</option>';210 echo '<option value="">' . esc_html__('Show All Categories', 'linkgenius') . '</option>'; 211 211 foreach ($categories as $category) { 212 $selected = (($_GET[LINKGENIUS_TYPE_CATEGORY]??'') == $category->slug) ? 'selected' : ''; 213 echo '<option value="' . $category->slug . '" '.$selected.'>' . $category->name . '</option>'; 212 echo '<option value="' . esc_attr($category->slug) . '" '.selected($_GET[LINKGENIUS_TYPE_CATEGORY] ?? '', $category->slug, false).'>' . esc_html($category->name) . '</option>'; 214 213 } 215 214 echo '</select>'; … … 219 218 if (!empty($tags)) { 220 219 echo '<select name="' . LINKGENIUS_TYPE_TAG . '" id="' . LINKGENIUS_TYPE_TAG . '" class="postform">'; 221 echo '<option value="">' . __('Show All Tags', 'text-domain') . '</option>';220 echo '<option value="">' . esc_html__('Show All Tags', 'linkgenius') . '</option>'; 222 221 foreach ($tags as $tag) { 223 $selected = (($_GET[LINKGENIUS_TYPE_TAG]??'') == $tag->slug) ? 'selected' : ''; 224 echo '<option value="' . $tag->slug . '" '.$selected.'>' . $tag->name . '</option>'; 222 echo '<option value="' . esc_attr($tag->slug) . '" '.selected($_GET[LINKGENIUS_TYPE_TAG] ?? '', $tag->slug, false).'>' . esc_html($tag->name) . '</option>'; 225 223 } 226 224 echo '</select>'; … … 270 268 function add_linkgenius_link_columns($columns) { 271 269 $offset = 2; 272 return array_slice($columns, 0, $offset, true) + array('link'=> __('Target URL' )) + array_slice($columns, $offset, count($columns) - 1, true);270 return array_slice($columns, 0, $offset, true) + array('link'=> __('Target URL', 'linkgenius')) + array_slice($columns, $offset, count($columns) - 1, true); 273 271 } 274 272 … … 286 284 function add_shortcode_column( $columns ) { 287 285 $offset = 2; 288 return array_slice($columns, 0, $offset, true) + array("shortcode" => __("Shortcode" )) + array_slice($columns, $offset, count($columns) - 1, true);286 return array_slice($columns, 0, $offset, true) + array("shortcode" => __("Shortcode", 'linkgenius')) + array_slice($columns, $offset, count($columns) - 1, true); 289 287 } 290 288 … … 323 321 <td><input type="text" id="%1$s-shortcode" class="linkgenius-copy-shortcode" name="shortcode" value="%2$s" onclick="this.select()" readonly></td> 324 322 </tr> 325 </table>', $type, esc_attr($shortcode));323 </table>', esc_attr($type), esc_attr($shortcode)); 326 324 } 327 325 -
linkgenius/trunk/includes/Editor.php
r3132032 r3346262 61 61 $post = null; 62 62 if (! defined('DOING_AJAX') || ! DOING_AJAX) { 63 wp_send_json_error(__('Invalid AJAX call' ));63 wp_send_json_error(__('Invalid AJAX call', 'linkgenius')); 64 64 } 65 65 elseif( isset( $_GET[ 'linkgenius_id' ] ) ){ … … 67 67 $post = get_post($id); 68 68 if($post === null || $post->post_type != LINKGENIUS_TYPE_LINK) { 69 wp_send_json_error( __( 'Invalid Id' ) );69 wp_send_json_error( __( 'Invalid Id', 'linkgenius' ) ); 70 70 } 71 71 } … … 73 73 $post = get_post(url_to_postid(esc_url_raw($_GET['linkgenius_url']))); 74 74 if($post === null || $post->post_type != LINKGENIUS_TYPE_LINK) { 75 wp_send_json_error( __( 'Invalid URL' ) );75 wp_send_json_error( __( 'Invalid URL', 'linkgenius') ); 76 76 } 77 77 } 78 78 else { 79 wp_send_json_error( __( 'Missing required post data' ) );79 wp_send_json_error( __( 'Missing required post data', 'linkgenius' ) ); 80 80 } 81 81 82 82 83 83 if($post == null || $post->post_type != LINKGENIUS_TYPE_LINK) { 84 wp_send_json_error( __( 'Invalid Post Parameters' ) );84 wp_send_json_error( __( 'Invalid Post Parameters', 'linkgenius' ) ); 85 85 } 86 86 wp_send_json_success(array( … … 94 94 public function search_linkgenius_links() { 95 95 if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ){ 96 wp_send_json_error(__('Invalid AJAX call' ));96 wp_send_json_error(__('Invalid AJAX call', 'linkgenius')); 97 97 } 98 98 elseif ( ! isset( $_GET[ 'keyword' ] ) ) { 99 wp_send_json_error( __( 'Missing required post data' ));99 wp_send_json_error( __( 'Missing required post data', 'linkgenius' )); 100 100 } 101 101 else { … … 132 132 function preview_linkgenius_taxonomy() { 133 133 if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) { 134 wp_send_json_error(__('Invalid AJAX call' ));134 wp_send_json_error(__('Invalid AJAX call', 'linkgenius')); 135 135 } 136 136 elseif ( ! isset( $_GET[ 'taxonomy'] ) || !isset($_GET['item_slug']) || !isset($_GET['template']) || !isset($_GET['sort'])) { 137 wp_send_json_error( __( 'Missing required post data' ));137 wp_send_json_error( __( 'Missing required post data', 'linkgenius' )); 138 138 } 139 139 elseif ( $_GET['taxonomy'] !== 'category' && $_GET['taxonomy'] !== 'tag' ) { 140 wp_send_json_error( __( 'Invalid taxonomy' ) );140 wp_send_json_error( __( 'Invalid taxonomy', 'linkgenius' ) ); 141 141 } 142 142 elseif ( $_GET['sort'] !== 'order' && $_GET['sort'] !== 'title') { 143 wp_send_json_error( __( 'Invalid sort' ) );143 wp_send_json_error( __( 'Invalid sort', 'linkgenius' ) ); 144 144 } 145 145 else { -
linkgenius/trunk/includes/Importer.php
r2993080 r3346262 92 92 93 93 if(sizeof($items) <= 0) : 94 _e("It looks like the uploaded file could not be parsed or did not contain any links. Please check the file and try again.", "linkgenius");94 esc_html_e("It looks like the uploaded file could not be parsed or did not contain any links. Please check the file and try again.", "linkgenius"); 95 95 else: 96 96 ?><div style="overflow-x:scroll"> … … 98 98 <thead> 99 99 <tr> 100 <th><?php echo implode("</th><th>", array_map(fn($v) => preg_replace("/^[a-z]+_/", "", $v) ,$headers)) ?></th>100 <th><?php echo implode("</th><th>", array_map(fn($v) => esc_html(preg_replace("/^[a-z]+_/", "", $v)) ,$headers)) ?></th> 101 101 </tr> 102 102 </thead> … … 104 104 <?php foreach ($items as $item) : ?> 105 105 <tr> 106 <td><? =implode('</td><td>', array_map(function($header) use ($item) {107 return is_array($item[$header]??"")106 <td><?php echo implode('</td><td>', array_map(function($header) use ($item) { 107 return esc_html(is_array($item[$header]??"") 108 108 ? implode(", \n", array_map(fn($key, $value) => "$key => $value", array_keys($item[$header]), $item[$header])) 109 : ($item[$header]??'') ;109 : ($item[$header]??'')); 110 110 }, $headers)) ?></td> 111 111 </tr> … … 131 131 'label_cb' => '', 132 132 'options' => array( 133 'discard' => __( 'Discard', ' cmb2' ),134 'import' => __( 'Import', ' cmb2' ),133 'discard' => __( 'Discard', 'linkgenius' ), 134 'import' => __( 'Import', 'linkgenius' ), 135 135 ), 136 136 'before' => fn($v) => $extra, … … 149 149 $cmb->add_field( array( 150 150 'name' => __('CSV or XML file', 'linkgenius'), 151 'desc' => sprintf(__('The file containing the link data.' )),151 'desc' => sprintf(__('The file containing the link data.', 'linkgenius')), 152 152 'id' => 'linkgenius_import_file', 153 153 'type' => 'text', -
linkgenius/trunk/includes/LinkLocator.php
r3132032 r3346262 85 85 $response .= implode("", array_filter($rows))."</table>"; 86 86 } 87 87 $response = wp_kses($response, array( 88 'table' => array('class' => true), 89 'tr' => array(), 90 'th' => array(), 91 'td' => array('class' => true), 92 'a' => array('href' => true, 'class' => true), 93 'span' => array('class' => true), 94 'p' => array(), 95 )); 88 96 // Return the results as JSON 89 echo json_encode($response);97 echo wp_json_encode($response); 90 98 wp_die(); 91 99 } … … 101 109 return ""; 102 110 } 103 return "<tr><td>". $result->ID."</td>104 <td>". $result->post_title."</td>105 <td>". $result->post_type."</td>111 return "<tr><td>".intval($result->ID)."</td> 112 <td>".esc_html($result->post_title)."</td> 113 <td>".esc_html($result->post_type)."</td> 106 114 <td class=\"types\">".implode(", ", array_keys($types))."</td> 107 115 <td><a href='".get_edit_post_link($result->ID)."'><span class='dashicons dashicons-edit'></span></a></td> -
linkgenius/trunk/includes/Metabox.php
r3132032 r3346262 6 6 { 7 7 public function cmb2_render_callback_for_clicks( $field, $escaped_value, $object_id, $object_type, $field_type_object ) { 8 ?><span id="clicks_label"><?php echo $escaped_value?></span>9 <a href='#' id='reset_clicks'><?php _e("Reset Clicks", "linkgenius")?></a>8 ?><span id="clicks_label"><?php echo esc_html($escaped_value); ?></span> 9 <a href='#' id='reset_clicks'><?php esc_html_e("Reset Clicks", "linkgenius")?></a> 10 10 <?php 11 11 } … … 13 13 public function cmb2_render_callback_for_link_locations( $field, $escaped_value, $object_id, $object_type, $field_type_object ) { 14 14 ?> 15 <a href='#' class="button-primary" id='search_link_locations'><?php _e("Search Link in Content", "linkgenius")?></a>15 <a href='#' class="button-primary" id='search_link_locations'><?php esc_html_e("Search Link in Content", "linkgenius")?></a> 16 16 <div id="link_locations"></div> 17 17 <?php … … 22 22 23 23 24 echo '<select ' . $field_type_object->concat_attrs( array( 'name' => $field_type_object->_name(), 'id' => $field_type_object->_id() ) ) . '>';24 echo '<select ' . $field_type_object->concat_attrs( array( 'name' => esc_attr($field_type_object->_name()), 'id' => esc_attr($field_type_object->_id()) ) ) . '>'; 25 25 26 26 foreach ( $options as $option_key => $option_value ) { 27 27 $disabled = preg_match("/_pro$/", $option_key) ? ' disabled="disabled"' : ''; 28 28 $escaped_value = $field_type_object->field->escaped_value(); 29 echo '<option value="' . $option_key . '"' . selected( $field_type_object->field->escaped_value(), $option_key, false ) . $disabled . '>' . $option_value. '</option>';29 echo '<option value="' . esc_attr($option_key) . '"' . selected( $field_type_object->field->escaped_value(), $option_key, false ) . $disabled . '>' . esc_html($option_value) . '</option>'; 30 30 } 31 31 … … 64 64 'type' => 'select', 'options' => 65 65 array( 66 /* translators: %s is the default value, either __('Enabled', 'linkgenius') or __('Disabled', 'linkgenius') */ 66 67 'default' => sprintf(__('Default (%s)', 'linkgenius'), $default ? __('Enabled', 'linkgenius') : __('Disabled', 'linkgenius')), 67 68 '1' => __('Enabled', 'linkgenius'), -
linkgenius/trunk/languages/linkgenius-fallback.po
r3132032 r3346262 659 659 #: includes/Metabox.php:414 660 660 msgid "Intro link locator" 661 msgstr " "661 msgstr "Check one location where your link appears in your content. To view the full list <strong><a href=\"https://all-affiliates.com/linkgenius/pro?utm_source=plugin&utm_medium=editor&utm_campaign=locator\" target=\"_blank\">get LinkGenius Pro</a></strong>." 662 662 663 663 #: includes/Metabox.php:481 -
linkgenius/trunk/linkgenius.php
r3341954 r3346262 4 4 Plugin URI: https://all-affiliates.com/linkgenius/ 5 5 Description: LinkGenius is a powerful (affiliate) link management plugin. With LinkGenius, you can effortlessly organize, optimize, and track your (affiliate) links, unlocking a new level of efficiency. 6 Version: 1.2. 26 Version: 1.2.3 7 7 Author: all-affiliates.com 8 8 Author URI: https://all-affiliates.com -
linkgenius/trunk/readme.txt
r3341954 r3346262 1 === LinkGenius - Affiliate Link Manager and Link Shortener Plugin===1 === LinkGenius - Affiliate Link Manager and Link Shortener === 2 2 Contributors: allaffiliates 3 3 Tags: affiliate links, affiliate link manager, link branding, affiliate disclosure, link shortener … … 6 6 Tested up to: 6.8 7 7 Requires PHP: 7.4 8 Stable tag: 1.2. 28 Stable tag: 1.2.3 9 9 License: GPL2 10 10 License URI: http://www.gnu.org/licenses/gpl-2.0.html 11 11 12 LinkGenius is an advanced affiliate link manager. Easily brand, disclose, tag, or categorize your affiliate links. Customize appearance, manage rel attributes, and more! 12 Affiliate link manager plugin to cloak, brand, disclose, track, replace and organize affiliate links with SEO-friendly redirects and tools. 13 13 14 14 == Description == … … 31 31 Manage your affiliate links with ease using LinkGenius. Add, edit, and delete affiliate links effortlessly, keeping them organized and accessible. Manage your affiliate link lists by categorizing and tagging your links. 32 32 33 = Easily Link sto Posts or Pages =34 Display individual links or a list sof affiliate links based on tags or categories to provide a cohesive representation of related links. Customize the layout and order of your list. LinkGenius supports creating links or link lists via multiple blocks, shortcodes, or by simply selecting text in the block editor.33 = Easily Link to Posts or Pages = 34 Display individual links or a list of affiliate links based on tags or categories to provide a cohesive representation of related links. Customize the layout and order of your list. LinkGenius supports creating links or link lists via multiple blocks, shortcodes, or by simply selecting text in the block editor. 35 35 36 36 = Find which posts or pages contain a specific link = … … 38 38 39 39 = Customizable Link Appearance = 40 Customize the appearance of your affiliate links. Add classes, or make a link open in a new window. Add UGC and sponsored attributes, or defined your own custom rel attrib tues.40 Customize the appearance of your affiliate links. Add classes, or make a link open in a new window. Add UGC and sponsored attributes, or defined your own custom rel attributes. 41 41 42 42 = Affiliate Disclosure = … … 62 62 - **Device based redirects:** Redirect users to alternative URLs, based on their browser, operating system, or other information in their user agent. 63 63 64 - **Link tracking:** Track the performance of your affiliate links with ease, using LinkGenius's link tracking capabilities powered by Google Analytics. Gain valuable insights into link performance and optimize your strategy accordingly. The server-side Tracking option allows you to even track clicks from directly from social media.64 - **Link tracking:** Track the performance of your affiliate links with ease, using LinkGenius's link tracking capabilities powered by Google Analytics. Gain valuable insights into link performance and optimize your strategy accordingly. The server-side tracking option allows you to even track clicks from directly from social media. 65 65 66 66 - **Commission tracking:** Track the commission you earn from your affiliate links by using commission postback. Do not only track the clicks but also the commission you earn from them. … … 69 69 70 70 == Installation == 71 Minimum requirements: WordPress 6.0 or higher, PHP 7.4 or higher. Plugin relies on WordPress permalinks for redirect functionality, ensure they are enabled. 71 72 72 73 ### Install LinkGenius from within WordPress … … 87 88 88 89 After installing and activating LinkGenius, navigate to the 'LinkGenius' menu in your WordPress dashboard. From there, you can easily add, edit, and delete your affiliate links. 90 91 = How do I use LinkGenius blocks and shortcodes? = 92 93 You can insert affiliate links or lists using blocks or shortcodes: 94 95 - Block - Use the "LinkGenius Link" block to add a single link, or the "LinkGenius Link List" block to show a list. 96 - Shortcode - [linkgenius-link id="123" target="_blank" rel="sponsored"] adds one link. 97 - List shortcode - [linkgenius-list category="shoes" order="ASC"] outputs all links from a category or tag. 98 99 Supported attributes include: id, category, tag, target, rel, and class. Combine attributes to customize appearance and behavior. 89 100 90 101 = Can I customize the appearance of my affiliate links? = … … 117 128 118 129 == Changelog == 130 = 1.2.3 = 131 - Security enhancements 132 - Translation improvements 133 119 134 = 1.2.2 = 120 135 - Updated readme.txt to remove "Best" and #1 from files in order to be compliant with guidelines 121 136 - Tested on WordPress 6.8 122 123 137 124 138 = 1.2.1 =
Note: See TracChangeset
for help on using the changeset viewer.