Plugin Directory

Changeset 3346262


Ignore:
Timestamp:
08/18/2025 09:11:09 AM (8 months ago)
Author:
allaffiliates
Message:

Updated to version 1.2.3

Location:
linkgenius
Files:
16 edited
3 copied

Legend:

Unmodified
Added
Removed
  • linkgenius/tags/1.2.3/includes/CPT.php

    r3174171 r3346262  
    4141    function register_linkgenius_link_post_type() {
    4242        $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' ),
    5757        );
    5858        $role = Settings::instance()->get_settings()['general_role'];
     
    101101    function register_linkgenius_categories() {
    102102        $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' ),
    120120        );
    121121
     
    145145    function register_linkgenius_tags() {
    146146        $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' ),
    164164        );
    165165
     
    208208            if (!empty($categories)) {
    209209                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>';
    211211                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>';
    214213                }
    215214                echo '</select>';
     
    219218            if (!empty($tags)) {
    220219                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>';
    222221                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>';
    225223                }
    226224                echo '</select>';
     
    270268    function add_linkgenius_link_columns($columns) {
    271269       $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);
    273271    }
    274272
     
    286284    function add_shortcode_column( $columns ) {
    287285        $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);
    289287    }
    290288
     
    323321                <td><input type="text" id="%1$s-shortcode" class="linkgenius-copy-shortcode" name="shortcode" value="%2$s" onclick="this.select()" readonly></td>
    324322            </tr>
    325             </table>', $type, esc_attr($shortcode));
     323            </table>', esc_attr($type), esc_attr($shortcode));
    326324    }
    327325
  • linkgenius/tags/1.2.3/includes/Editor.php

    r3132032 r3346262  
    6161        $post = null;
    6262        if (! defined('DOING_AJAX') || ! DOING_AJAX) {
    63             wp_send_json_error(__('Invalid AJAX call'));
     63            wp_send_json_error(__('Invalid AJAX call', 'linkgenius'));
    6464        }
    6565        elseif( isset( $_GET[ 'linkgenius_id' ] ) ){
     
    6767            $post = get_post($id);
    6868            if($post === null || $post->post_type != LINKGENIUS_TYPE_LINK) {
    69                 wp_send_json_error( __( 'Invalid Id' ) );
     69                wp_send_json_error( __( 'Invalid Id', 'linkgenius' ) );
    7070            }
    7171        }
     
    7373            $post = get_post(url_to_postid(esc_url_raw($_GET['linkgenius_url'])));
    7474            if($post === null || $post->post_type != LINKGENIUS_TYPE_LINK) {
    75                 wp_send_json_error( __( 'Invalid URL' ) );
     75                wp_send_json_error( __( 'Invalid URL', 'linkgenius') );
    7676            }
    7777        }
    7878        else {
    79             wp_send_json_error( __( 'Missing required post data' ) );
     79            wp_send_json_error( __( 'Missing required post data', 'linkgenius' ) );
    8080        }
    8181
    8282
    8383        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' ) );
    8585        }
    8686        wp_send_json_success(array(
     
    9494    public function search_linkgenius_links() {
    9595        if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ){
    96             wp_send_json_error(__('Invalid AJAX call'));
     96            wp_send_json_error(__('Invalid AJAX call', 'linkgenius'));
    9797        }
    9898        elseif ( ! isset( $_GET[ 'keyword' ] ) ) {
    99             wp_send_json_error( __( 'Missing required post data' ));
     99            wp_send_json_error( __( 'Missing required post data', 'linkgenius' ));
    100100        }
    101101        else {
     
    132132    function preview_linkgenius_taxonomy() {
    133133        if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) {
    134             wp_send_json_error(__('Invalid AJAX call'));
     134            wp_send_json_error(__('Invalid AJAX call', 'linkgenius'));
    135135        }
    136136        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' ));
    138138        }
    139139        elseif ( $_GET['taxonomy'] !== 'category' && $_GET['taxonomy'] !== 'tag' ) {
    140             wp_send_json_error( __( 'Invalid taxonomy' ) );
     140            wp_send_json_error( __( 'Invalid taxonomy', 'linkgenius' ) );
    141141        }
    142142        elseif ( $_GET['sort'] !== 'order' && $_GET['sort'] !== 'title') {
    143             wp_send_json_error( __( 'Invalid sort' ) );
     143            wp_send_json_error( __( 'Invalid sort', 'linkgenius' ) );
    144144        }
    145145        else {
  • linkgenius/tags/1.2.3/includes/Importer.php

    r2993080 r3346262  
    9292           
    9393            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");
    9595            else:
    9696            ?><div style="overflow-x:scroll">
     
    9898                <thead>
    9999                    <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>
    101101                    </tr>
    102102                </thead>
     
    104104                    <?php foreach ($items as $item) : ?>
    105105                        <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]??"")
    108108                                    ? implode(", \n", array_map(fn($key, $value) => "$key => $value", array_keys($item[$header]), $item[$header]))
    109                                     : ($item[$header]??'');
     109                                    : ($item[$header]??''));
    110110                            }, $headers)) ?></td>
    111111                        </tr>
     
    131131                'label_cb' => '',
    132132                'options'          => array(
    133                     'discard' => __( 'Discard', 'cmb2' ),
    134                     'import'   => __( 'Import', 'cmb2' ),
     133                    'discard' => __( 'Discard', 'linkgenius' ),
     134                    'import'   => __( 'Import', 'linkgenius' ),
    135135                ),
    136136                'before' => fn($v) => $extra,
     
    149149            $cmb->add_field( array(
    150150                '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')),
    152152                'id'      => 'linkgenius_import_file',
    153153                'type'    => 'text',
  • linkgenius/tags/1.2.3/includes/LinkLocator.php

    r3132032 r3346262  
    8585            $response .= implode("", array_filter($rows))."</table>";
    8686        }
    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        ));
    8896        // Return the results as JSON
    89         echo json_encode($response);
     97        echo wp_json_encode($response);
    9098        wp_die();
    9199    }
     
    101109            return "";
    102110        }
    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>
    106114                    <td class=\"types\">".implode(", ", array_keys($types))."</td>
    107115                    <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  
    66{
    77    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>
    1010        <?php
    1111    }
     
    1313    public function cmb2_render_callback_for_link_locations( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {
    1414        ?>
    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>
    1616        <div id="link_locations"></div>
    1717        <?php
     
    2222
    2323
    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()) ) ) . '>';
    2525
    2626    foreach ( $options as $option_key => $option_value ) {
    2727        $disabled = preg_match("/_pro$/", $option_key) ? ' disabled="disabled"' : '';
    2828        $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>';
    3030    }
    3131
     
    6464                'type' => 'select', 'options' =>
    6565                array(
     66                    /* translators: %s is the default value, either __('Enabled', 'linkgenius') or __('Disabled', 'linkgenius') */
    6667                    'default'   => sprintf(__('Default (%s)', 'linkgenius'), $default ? __('Enabled', 'linkgenius') : __('Disabled', 'linkgenius')),
    6768                    '1'         => __('Enabled', 'linkgenius'),
  • linkgenius/tags/1.2.3/languages/linkgenius-fallback.po

    r3132032 r3346262  
    659659#: includes/Metabox.php:414
    660660msgid "Intro link locator"
    661 msgstr ""
     661msgstr "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>."
    662662
    663663#: includes/Metabox.php:481
  • linkgenius/tags/1.2.3/linkgenius.php

    r3341954 r3346262  
    44Plugin URI: https://all-affiliates.com/linkgenius/
    55Description: 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.2
     6Version: 1.2.3
    77Author: all-affiliates.com
    88Author 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 ===
    22Contributors: allaffiliates
    33Tags: affiliate links, affiliate link manager, link branding, affiliate disclosure, link shortener
     
    66Tested up to: 6.8
    77Requires PHP: 7.4
    8 Stable tag: 1.2.2
     8Stable tag: 1.2.3
    99License: GPL2
    1010License URI: http://www.gnu.org/licenses/gpl-2.0.html
    1111
    12 LinkGenius is an advanced affiliate link manager. Easily brand, disclose, tag, or categorize your affiliate links. Customize appearance, manage rel attributes, and more!
     12Affiliate link manager plugin to cloak, brand, disclose, track, replace and organize affiliate links with SEO-friendly redirects and tools.
    1313
    1414== Description ==
     
    3131Manage 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.
    3232
    33 = Easily Links to Posts or Pages =
    34 Display individual links or a lists 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.
     33= Easily Link to Posts or Pages =
     34Display 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.
    3535
    3636= Find which posts or pages contain a specific link =
     
    3838
    3939= 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 attribtues.
     40Customize 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.
    4141
    4242= Affiliate Disclosure =
     
    6262- **Device based redirects:** Redirect users to alternative URLs, based on their browser, operating system, or other information in their user agent.
    6363
    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.
    6565
    6666- **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.
     
    6969
    7070== Installation ==
     71Minimum requirements: WordPress 6.0 or higher, PHP 7.4 or higher. Plugin relies on WordPress permalinks for redirect functionality, ensure they are enabled.
    7172
    7273### Install LinkGenius from within WordPress
     
    8788
    8889After 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
     93You 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
     99Supported attributes include: id, category, tag, target, rel, and class. Combine attributes to customize appearance and behavior.
    89100
    90101= Can I customize the appearance of my affiliate links? =
     
    117128
    118129== Changelog ==
     130= 1.2.3 =
     131- Security enhancements
     132- Translation improvements
     133
    119134= 1.2.2 =
    120135- Updated readme.txt to remove "Best" and #1 from files in order to be compliant with guidelines
    121136- Tested on WordPress 6.8
    122 
    123137
    124138= 1.2.1 =
  • linkgenius/trunk/includes/CPT.php

    r3174171 r3346262  
    4141    function register_linkgenius_link_post_type() {
    4242        $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' ),
    5757        );
    5858        $role = Settings::instance()->get_settings()['general_role'];
     
    101101    function register_linkgenius_categories() {
    102102        $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' ),
    120120        );
    121121
     
    145145    function register_linkgenius_tags() {
    146146        $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' ),
    164164        );
    165165
     
    208208            if (!empty($categories)) {
    209209                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>';
    211211                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>';
    214213                }
    215214                echo '</select>';
     
    219218            if (!empty($tags)) {
    220219                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>';
    222221                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>';
    225223                }
    226224                echo '</select>';
     
    270268    function add_linkgenius_link_columns($columns) {
    271269       $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);
    273271    }
    274272
     
    286284    function add_shortcode_column( $columns ) {
    287285        $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);
    289287    }
    290288
     
    323321                <td><input type="text" id="%1$s-shortcode" class="linkgenius-copy-shortcode" name="shortcode" value="%2$s" onclick="this.select()" readonly></td>
    324322            </tr>
    325             </table>', $type, esc_attr($shortcode));
     323            </table>', esc_attr($type), esc_attr($shortcode));
    326324    }
    327325
  • linkgenius/trunk/includes/Editor.php

    r3132032 r3346262  
    6161        $post = null;
    6262        if (! defined('DOING_AJAX') || ! DOING_AJAX) {
    63             wp_send_json_error(__('Invalid AJAX call'));
     63            wp_send_json_error(__('Invalid AJAX call', 'linkgenius'));
    6464        }
    6565        elseif( isset( $_GET[ 'linkgenius_id' ] ) ){
     
    6767            $post = get_post($id);
    6868            if($post === null || $post->post_type != LINKGENIUS_TYPE_LINK) {
    69                 wp_send_json_error( __( 'Invalid Id' ) );
     69                wp_send_json_error( __( 'Invalid Id', 'linkgenius' ) );
    7070            }
    7171        }
     
    7373            $post = get_post(url_to_postid(esc_url_raw($_GET['linkgenius_url'])));
    7474            if($post === null || $post->post_type != LINKGENIUS_TYPE_LINK) {
    75                 wp_send_json_error( __( 'Invalid URL' ) );
     75                wp_send_json_error( __( 'Invalid URL', 'linkgenius') );
    7676            }
    7777        }
    7878        else {
    79             wp_send_json_error( __( 'Missing required post data' ) );
     79            wp_send_json_error( __( 'Missing required post data', 'linkgenius' ) );
    8080        }
    8181
    8282
    8383        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' ) );
    8585        }
    8686        wp_send_json_success(array(
     
    9494    public function search_linkgenius_links() {
    9595        if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ){
    96             wp_send_json_error(__('Invalid AJAX call'));
     96            wp_send_json_error(__('Invalid AJAX call', 'linkgenius'));
    9797        }
    9898        elseif ( ! isset( $_GET[ 'keyword' ] ) ) {
    99             wp_send_json_error( __( 'Missing required post data' ));
     99            wp_send_json_error( __( 'Missing required post data', 'linkgenius' ));
    100100        }
    101101        else {
     
    132132    function preview_linkgenius_taxonomy() {
    133133        if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) {
    134             wp_send_json_error(__('Invalid AJAX call'));
     134            wp_send_json_error(__('Invalid AJAX call', 'linkgenius'));
    135135        }
    136136        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' ));
    138138        }
    139139        elseif ( $_GET['taxonomy'] !== 'category' && $_GET['taxonomy'] !== 'tag' ) {
    140             wp_send_json_error( __( 'Invalid taxonomy' ) );
     140            wp_send_json_error( __( 'Invalid taxonomy', 'linkgenius' ) );
    141141        }
    142142        elseif ( $_GET['sort'] !== 'order' && $_GET['sort'] !== 'title') {
    143             wp_send_json_error( __( 'Invalid sort' ) );
     143            wp_send_json_error( __( 'Invalid sort', 'linkgenius' ) );
    144144        }
    145145        else {
  • linkgenius/trunk/includes/Importer.php

    r2993080 r3346262  
    9292           
    9393            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");
    9595            else:
    9696            ?><div style="overflow-x:scroll">
     
    9898                <thead>
    9999                    <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>
    101101                    </tr>
    102102                </thead>
     
    104104                    <?php foreach ($items as $item) : ?>
    105105                        <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]??"")
    108108                                    ? implode(", \n", array_map(fn($key, $value) => "$key => $value", array_keys($item[$header]), $item[$header]))
    109                                     : ($item[$header]??'');
     109                                    : ($item[$header]??''));
    110110                            }, $headers)) ?></td>
    111111                        </tr>
     
    131131                'label_cb' => '',
    132132                'options'          => array(
    133                     'discard' => __( 'Discard', 'cmb2' ),
    134                     'import'   => __( 'Import', 'cmb2' ),
     133                    'discard' => __( 'Discard', 'linkgenius' ),
     134                    'import'   => __( 'Import', 'linkgenius' ),
    135135                ),
    136136                'before' => fn($v) => $extra,
     
    149149            $cmb->add_field( array(
    150150                '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')),
    152152                'id'      => 'linkgenius_import_file',
    153153                'type'    => 'text',
  • linkgenius/trunk/includes/LinkLocator.php

    r3132032 r3346262  
    8585            $response .= implode("", array_filter($rows))."</table>";
    8686        }
    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        ));
    8896        // Return the results as JSON
    89         echo json_encode($response);
     97        echo wp_json_encode($response);
    9098        wp_die();
    9199    }
     
    101109            return "";
    102110        }
    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>
    106114                    <td class=\"types\">".implode(", ", array_keys($types))."</td>
    107115                    <td><a href='".get_edit_post_link($result->ID)."'><span class='dashicons dashicons-edit'></span></a></td>
  • linkgenius/trunk/includes/Metabox.php

    r3132032 r3346262  
    66{
    77    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>
    1010        <?php
    1111    }
     
    1313    public function cmb2_render_callback_for_link_locations( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {
    1414        ?>
    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>
    1616        <div id="link_locations"></div>
    1717        <?php
     
    2222
    2323
    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()) ) ) . '>';
    2525
    2626    foreach ( $options as $option_key => $option_value ) {
    2727        $disabled = preg_match("/_pro$/", $option_key) ? ' disabled="disabled"' : '';
    2828        $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>';
    3030    }
    3131
     
    6464                'type' => 'select', 'options' =>
    6565                array(
     66                    /* translators: %s is the default value, either __('Enabled', 'linkgenius') or __('Disabled', 'linkgenius') */
    6667                    'default'   => sprintf(__('Default (%s)', 'linkgenius'), $default ? __('Enabled', 'linkgenius') : __('Disabled', 'linkgenius')),
    6768                    '1'         => __('Enabled', 'linkgenius'),
  • linkgenius/trunk/languages/linkgenius-fallback.po

    r3132032 r3346262  
    659659#: includes/Metabox.php:414
    660660msgid "Intro link locator"
    661 msgstr ""
     661msgstr "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>."
    662662
    663663#: includes/Metabox.php:481
  • linkgenius/trunk/linkgenius.php

    r3341954 r3346262  
    44Plugin URI: https://all-affiliates.com/linkgenius/
    55Description: 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.2
     6Version: 1.2.3
    77Author: all-affiliates.com
    88Author 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 ===
    22Contributors: allaffiliates
    33Tags: affiliate links, affiliate link manager, link branding, affiliate disclosure, link shortener
     
    66Tested up to: 6.8
    77Requires PHP: 7.4
    8 Stable tag: 1.2.2
     8Stable tag: 1.2.3
    99License: GPL2
    1010License URI: http://www.gnu.org/licenses/gpl-2.0.html
    1111
    12 LinkGenius is an advanced affiliate link manager. Easily brand, disclose, tag, or categorize your affiliate links. Customize appearance, manage rel attributes, and more!
     12Affiliate link manager plugin to cloak, brand, disclose, track, replace and organize affiliate links with SEO-friendly redirects and tools.
    1313
    1414== Description ==
     
    3131Manage 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.
    3232
    33 = Easily Links to Posts or Pages =
    34 Display individual links or a lists 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.
     33= Easily Link to Posts or Pages =
     34Display 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.
    3535
    3636= Find which posts or pages contain a specific link =
     
    3838
    3939= 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 attribtues.
     40Customize 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.
    4141
    4242= Affiliate Disclosure =
     
    6262- **Device based redirects:** Redirect users to alternative URLs, based on their browser, operating system, or other information in their user agent.
    6363
    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.
    6565
    6666- **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.
     
    6969
    7070== Installation ==
     71Minimum requirements: WordPress 6.0 or higher, PHP 7.4 or higher. Plugin relies on WordPress permalinks for redirect functionality, ensure they are enabled.
    7172
    7273### Install LinkGenius from within WordPress
     
    8788
    8889After 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
     93You 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
     99Supported attributes include: id, category, tag, target, rel, and class. Combine attributes to customize appearance and behavior.
    89100
    90101= Can I customize the appearance of my affiliate links? =
     
    117128
    118129== Changelog ==
     130= 1.2.3 =
     131- Security enhancements
     132- Translation improvements
     133
    119134= 1.2.2 =
    120135- Updated readme.txt to remove "Best" and #1 from files in order to be compliant with guidelines
    121136- Tested on WordPress 6.8
    122 
    123137
    124138= 1.2.1 =
Note: See TracChangeset for help on using the changeset viewer.