Plugin Directory

Changeset 2688890


Ignore:
Timestamp:
03/04/2022 01:12:15 PM (4 years ago)
Author:
seomantis
Message:

major fixes
now the plugin works awesome (i hope:D)! next near update: internal links added only once per URL.

Location:
seo-links-interlinking
Files:
42 added
3 edited

Legend:

Unmodified
Added
Removed
  • seo-links-interlinking/trunk/ajax.php

    r2682042 r2688890  
    3535    $title = strtolower( $content_post->post_title );
    3636    $permalink = get_the_permalink( $post_id );
    37     $permalink_explode = explode('/', $permalink);
    38     $permalink_filter = $permalink_explode[3] ?? '';
     37    //$permalink_explode = explode('/', $permalink);
     38    //$permalink_filter = $permalink_explode[3] ?? '';
    3939
    4040    $server_uri = SEOLI_SITE_URL . SEOLI_SERVER_REQUEST_URI;
     
    6262    $most_relevant_keyword = array(); // Tutte le keyword escluse quelle della url corrente
    6363    $seo_link_keywords = array(); // Tutte le keyword della url corrente
    64     $seo_link_keywords_filtered = array(); // Tutte le keyword che matchano il titolo con il filtro sul numero di caratteri delle parole
     64    $internal_link_keywords_filtered = array(); // Tutte le keyword che matchano il titolo con il filtro sul numero di caratteri delle parole
    6565    $words = array();
    6666
     67    //$categories = wp_get_post_categories( $post_id );
    6768    foreach($rowData as $row){
    6869        $ga_url = $row->page;
     
    7273        $ga_key = str_replace('”', '"', $ga_key);
    7374
    74         $url_explode = explode('/', $ga_url );
    75         $url_filter = $url_explode[3] ?? '';
     75        //$url_explode = explode('/', $ga_url );
     76        //$url_filter = $url_explode[3] ?? '';
    7677
    7778        // Nelle keyword link tutte le rilevanti ( escluso la URL ). Se il post è in bozza droppo la condizione url_filter = permalink_filter
    78         if( ( $post_status == 'draft' || $url_filter == $permalink_filter ) && $permalink != $ga_url ) {
     79        // Se la lunghezza della kw è > di 5 la inserisco negli interal links, altrimenti no
     80        // La condizione url_filter == permalink_filter mi serve per prendere le kw della categoria, quindi:
     81        // Prendo le categorie del post. Per ogni ga_url prendo le categorie. Se Almeno una categoria di ga_url è presente tra le categorie del post, prendo la kw.
     82
     83        //$ga_post_id = url_to_postid( $ga_url );
     84        //$ga_categories = wp_get_post_categories( $ga_post_id );
     85        //$intersect = array_intersect( $categories, $ga_categories ); // Intersezione: è vuota se le categorie del post e di ga_post sono tutte diverse, se almeno una è in comune invece non sarà vuota ma conterrà appunto la categoria in comune.
     86
     87        //if( ( $post_status == 'draft' || $url_filter == $permalink_filter ) && $permalink != $ga_url && strlen( $ga_key ) > 5 ) {
     88        //if( ( $post_status == 'draft' || !empty( $intersect ) ) && $permalink != $ga_url && strlen( $ga_key ) > 5 ) {
     89        if( $permalink != $ga_url && strlen( $ga_key ) > 5 ) { // Mostro tutte le keywords sempre
    7990            // Se sono in /tecnologia/articolo prendo solo le keyword che hanno url /tecnlogia
    8091
     
    93104                    $replaced[] = $ga_key;
    94105                    $words[] = seoli_search_replace_regex( $ga_key, $content );
    95                 } else {
    96                     if (false !== strpos($content, $url_with_content)) {
    97                         // Already replaced
    98                         //$replaced[] = $ga_key;
    99                     }
    100106                }
     107            }
    101108
     109            /**
     110             * Esplodo la keyword in parole lunghe almeno 3 caratteri
     111             * Esplodo il titolo in parole lunghe almeno 3 caratteri
     112             * Se coincidono le mostro, altrimenti mostro tutte le keyword
     113             */
     114            $ga_key_array = explode(' ', $ga_key);
     115            $ga_key_array_filtered = array_filter($ga_key_array,function($v){ return strlen($v) > 3; });
     116            $title_array = explode(' ', $title);
     117            $title_array_filtered = array_filter($title_array,function($v){ return strlen($v) > 3; });
     118            // Torna gli elementi di ga_key_filtered che non sono presenti in title_array_filtered, quindi mi deve tornare 0 per avere un match completo.
     119            $array_diff = array_diff( $ga_key_array_filtered, $title_array_filtered );
     120            if( empty( $array_diff ) && !empty( $ga_key_array_filtered ) ) {
     121                $internal_link_keywords_filtered[] = $ga_key;
    102122            }
    103123        }
    104124
    105125        // Nelle keyword seo Solo la URL del post
    106         $ga_url_explode = array_filter( explode('/', $ga_url) );
     126        $ga_url_explode = array_filter( explode('/', str_replace( site_url(), '', $ga_url )) );
    107127        $ga_url_post_name = array_pop( $ga_url_explode );
     128        //echo $permalink . " --> " . $ga_url_post_name . "\n";
    108129        if( strpos( $permalink, $ga_url_post_name ) !== false ) {
    109130            $seo_link_keywords[] = $ga_key;
     
    113134        }
    114135
    115         /**
    116          * Esplodo la keyword in parole lunghe almeno 3 caratteri
    117          * Esplodo il titolo in parole lunghe almeno 3 caratteri
    118          * Se coincidono le mostro, altrimenti mostro tutte le keyword
    119          */
    120         $ga_key_array = explode(' ', $ga_key);
    121         $ga_key_array_filtered = array_filter($ga_key_array,function($v){ return strlen($v) > 3; });
    122         $title_array = explode(' ', $title);
    123         $title_array_filtered = array_filter($title_array,function($v){ return strlen($v) > 3; });
    124         // Torna gli elementi di ga_key_filtered che non sono presenti in title_array_filtered, quindi mi deve tornare 0 per avere un match completo.
    125         $array_diff = array_diff( $ga_key_array_filtered, $title_array_filtered );
    126         if( empty( $array_diff ) ) {
    127             $seo_link_keywords_filtered[] = $ga_key;
    128         }
    129 
    130136        $keyword_position[$ga_key] = $row->position;
    131         $keyword_impressions[$ga_key] = $row->impressions;
     137        $keyword_impressions[$ga_key] += $row->impressions;
    132138        $keyword_processed[] = $ga_key;
    133139    }
     
    144150
    145151    update_post_meta( $content_post->ID, 'seo_links_keywords', $seo_link_keywords);
    146     update_post_meta( $content_post->ID, 'seo_links_keywords_filtered', $seo_link_keywords_filtered);
     152    update_post_meta( $content_post->ID, 'seo_links_keywords_filtered', $internal_link_keywords_filtered);
     153    update_post_meta( $content_post->ID, 'internal_links_keywords_filtered', $internal_link_keywords_filtered);
    147154    update_post_meta( $content_post->ID, 'seo_links_keywords_position', $keyword_position);
    148155    update_post_meta( $content_post->ID, 'seo_links_keywords_impressions', $keyword_impressions);
     
    155162        'post_content' => $content,
    156163        'seo_links_keywords' => $seo_link_keywords,
    157         'seo_links_keywords_filtered' => $seo_link_keywords_filtered,
     164        'seo_links_keywords_filtered' => $internal_link_keywords_filtered,
     165        'internal_links_keywords_filtered' => $internal_link_keywords_filtered,
    158166        'seo_links_keywords_position' => $keyword_position,
    159167        'seo_links_keywords_impressions' => $keyword_impressions,
  • seo-links-interlinking/trunk/readme.txt

    r2683944 r2688890  
    55Requires at least: 4.7
    66Tested up to: 5.8
    7 Stable tag: 1.5.5
     7Stable tag: 1.5.4
    88Requires PHP: 7.1
    99License: GPLv2 or later
     
    2626
    2727== Upgrade Notice ==
     28
     29= 1.5.8 =
     30You can run add links into pages too
     31Internal Links pagination
     32Minor fixes
    2833
    2934= 1.5.5 =
  • seo-links-interlinking/trunk/scdata.php

    r2683944 r2688890  
    66 * Author: WP SEO Plugins
    77 * Author URI: https://wpseoplugins.org/
    8  * Version: 1.5.5
     8 * Version: 1.5.8
    99 */
    1010header('Content-Type: text/html; charset=utf-8');
     
    3232define( 'SEOLI_SITE_URL', ( SEOLI_SERVER_PORT == 80 ? 'http://' : 'https://' ) . SEOLI_SERVER_NAME );
    3333define( 'SEOLI_SERVER_REQUEST_URI', $_SERVER['REQUEST_URI']);
    34 define( 'SEOLI_VERSION', '1.5.5' );
     34define( 'SEOLI_VERSION', '1.5.8' );
    3535
    3636
    3737#function for add metabox.
    3838function seoli_register_meta_boxes() {
    39     add_meta_box("seoli-meta-box", "SEO Links Interlinking", "seoli_display_callback", "post", "side", "default", null);
     39    add_meta_box("seoli-meta-box", "SEO Links Interlinking", "seoli_display_callback", ["post", "page"], "side", "default", null);
    4040
    4141}
     
    4747
    4848    <script>
     49
     50        const _internaLinksPaginationLimit = 100;
     51
    4952        function seoli_isGutenbergActive() {
    5053            return typeof wp !== 'undefined' && typeof wp.blocks !== 'undefined';
     
    192195                    const seo_links_keywords_impressions = response.seo_links_keywords_impressions;
    193196                    const seo_links_keywords_filtered = response.seo_links_keywords_filtered;
     197                    const internal_links_keywords_filtered = response.internal_links_keywords_filtered;
    194198                    const seo_links_keywords = response.seo_links_keywords;
     199
     200                    <!-- SEO Keywords -->
    195201                    let seo_keywords = [];
    196202                    for( let slkf in seo_links_keywords_filtered ) {
    197                         //seo_keywords[ seo_links_keywords_filtered[ slkf ] ] = seo_links_keywords_position[ seo_links_keywords_filtered[ slkf ] ];
    198203                        seo_keywords[ seo_links_keywords_filtered[ slkf ] ] = seo_links_keywords_impressions[ seo_links_keywords_filtered[ slkf ] ];
    199204                    }
     
    210215                        <tbody>`;
    211216
     217                    seo_keywords = [];
     218                    for( let slk in seo_links_keywords ) {
     219                        seo_keywords[ seo_links_keywords[ slk ] ] = seo_links_keywords_impressions[ seo_links_keywords[ slk ] ];
     220                    }
    212221                    for( let sk in seo_keywords ) {
    213222                        seo_link_keywords_html += `
    214                         <tr class="seo_links_keywords_filtered">
    215                             <td>
    216                                 `+ seoli_stripslashes( sk ) +`
    217                             </td>
    218                             <td style="text-align: center;">
    219                                 `+ seo_keywords[ sk ] + `
    220                             </td>
    221                         </tr>
    222                         `;
    223                     }
    224 
    225                     seo_link_keywords_html += `
    226                     <tr class="seo_links_keywords_filtered">
    227                         <td colspan="2"><a href="javascript:void(0);" onclick="jQuery('.seo_keywords').show();jQuery('.seo_links_keywords_filtered').hide();">Show more keywords</a></td>
    228                     </tr>`;
    229 
    230                     seo_keywords = [];
    231                     for( let slk in seo_links_keywords ) {
    232                         //seo_keywords[ seo_links_keywords[ slk ] ] = seo_links_keywords_position[ seo_links_keywords[ slk ] ];
    233                         seo_keywords[ seo_links_keywords[ slk ] ] = seo_links_keywords_impressions[ seo_links_keywords[ slk ] ];
    234                     }
    235                     for( let sk in seo_keywords ) {
    236                         seo_link_keywords_html += `
    237                         <tr class="seo_keywords" style="display:none;">
     223                        <tr class="seo_keywords">
    238224                            <td>
    239225                                `+ seoli_stripslashes( sk ) +`
     
    249235                    document.getElementById('seo_links_keyword').innerHTML = seo_link_keywords_html;
    250236
     237                    <!-- Internal Links -->
     238                    let internal_links = [];
     239
     240                    let seo_links_most_relevant_keyword_html = `
     241                         <input type="text" id="seo_links_most_relevant_keyword_input" onkeyup="keywordResearch('seo_links_most_relevant_keyword')" placeholder="Search for keyword.." style="margin-top: 16px;width: 100%;" />
     242                            <table style="margin: 8px 0;">
     243                                <thead>
     244                                <tr>
     245                                    <th scope="row" style="width:70%;cursor: pointer;">Keyword</th>
     246                                    <th scope="row" style="cursor: pointer;">Impressions</th>
     247                                </tr>
     248                                </thead>
     249                                <tbody>`;
     250
     251                    if( internal_links_keywords_filtered.length > 0 ) {
     252                        for( let slkf in internal_links_keywords_filtered ) {
     253                            internal_links[ internal_links_keywords_filtered[ slkf ] ] = seo_links_keywords_impressions[ internal_links_keywords_filtered[ slkf ] ];
     254                        }
     255
     256                        for( let sk in internal_links ) {
     257                            seo_links_most_relevant_keyword_html += `
     258                                <tr class="internal_links_keywords_filtered">
     259                                    <td>
     260                                        `+ seoli_stripslashes( sk ) +`
     261                                    </td>
     262                                    <td style="text-align: center;">
     263                                        `+ internal_links[ sk ] + `
     264                                    </td>
     265                                </tr>
     266                                `;
     267                        }
     268
     269                        seo_links_most_relevant_keyword_html += `
     270                            <tr class="internal_links_keywords_filtered paginate">
     271                                <td colspan="2"><a href="javascript:void(0);" onclick="paginateInternalLinks()">Show more keywords</a></td>
     272                            </tr>`;
     273                    }
     274
    251275                    const seo_links_most_relevant_keyword = response.most_relevant_keyword;
    252                     let internal_links = [];
     276                    internal_links = [];
    253277                    for( let i = 0; i < seo_links_most_relevant_keyword.length; i++ ){
    254                         //internal_links[ seo_links_most_relevant_keyword[i] ] = seo_links_keywords_position[ seo_links_most_relevant_keyword[i] ];
    255278                        internal_links[ seo_links_most_relevant_keyword[i] ] = seo_links_keywords_impressions[ seo_links_most_relevant_keyword[i] ];
    256279                    }
    257280
    258                     let seo_links_most_relevant_keyword_html = `
    259                      <input type="text" id="seo_links_most_relevant_keyword_input" onkeyup="keywordResearch('seo_links_most_relevant_keyword')" placeholder="Search for keyword.." style="margin-top: 16px;width: 100%;" />
    260                         <table style="margin: 8px 0;">
    261                             <thead>
    262                             <tr>
    263                                 <th scope="row" style="width:70%;cursor: pointer;">Keyword</th>
    264                                 <th scope="row" style="cursor: pointer;">Impressions</th>
    265                             </tr>
    266                             </thead>
    267                             <tbody>`;
     281                    let j = 0;
     282                    let _display = '';
    268283                    for( let il in internal_links ) {
    269284                        let dashicon_yes = '';
     
    271286                            dashicon_yes = '<span class="dashicons dashicons-yes"></span>';
    272287                        }
     288                        if( internal_links_keywords_filtered.length > 0 ) {
     289                            _display = 'display:none;';
     290                        }
     291                        if( j++ >= _internaLinksPaginationLimit ) {
     292                            _display = 'display:none;';
     293                        }
     294
    273295                        seo_links_most_relevant_keyword_html += `
    274                         <tr>
     296                        <tr class="internal_links" style="` + _display  + `">
    275297                            <td>
    276298                                `+ seoli_stripslashes( il ) +`
     
    285307                        `;
    286308                    }
     309                    if( j > _internaLinksPaginationLimit ) {
     310                        if( internal_links_keywords_filtered.length == 0 ) {
     311                            _display = '';
     312                        }
     313                        seo_links_most_relevant_keyword_html += `
     314                            <tr class="internal_links paginate" style="` + _display  + `">
     315                                <td colspan="2"><a href="javascript:void(0);" onclick="paginateInternalLinks()">Show more keywords</a></td>
     316                            </tr>`;
     317                    }
    287318                    seo_links_most_relevant_keyword_html += `
    288319                            </tbody>
     
    290321                    document.getElementById('seo_links_most_relevant_keyword').innerHTML = seo_links_most_relevant_keyword_html;
    291322                });
     323            }
     324        }
     325
     326        function paginateInternalLinks() {
     327            jQuery('.internal_links_keywords_filtered').hide();
     328            const internal_links = jQuery('.internal_links:not(:visible)');
     329            for( let i = 0; i < _internaLinksPaginationLimit; i++ ) {
     330                jQuery( internal_links[ i ] ).show();
     331            }
     332            if( internal_links.length <= _internaLinksPaginationLimit ) {
     333                jQuery( '.internal_links.paginate' ).hide();
     334            } else {
     335                jQuery( '.internal_links.paginate' ).show();
    292336            }
    293337        }
     
    394438                        tr[i].style.display = "";
    395439                    } else {
     440                        tr[i].style.display = "none";
     441                    }
     442                    if( tr[i].className == 'internal_links_keywords_filtered' ) {
    396443                        tr[i].style.display = "none";
    397444                    }
     
    521568        $seo_links_keywords_position = get_post_meta( $post->ID, 'seo_links_keywords_position', true);
    522569        $seo_links_keywords_impressions = get_post_meta( $post->ID, 'seo_links_keywords_impressions', true);
     570        $seo_links_keywords_impressions = $seo_links_keywords_impressions != '' ? $seo_links_keywords_impressions : array();
    523571        $most_relevant_keyword = get_post_meta( $post->ID, 'most_relevant_keyword', true);
    524572        $seo_links_all_keywords = get_post_meta( $post->ID, 'seo_links_all_keywords', true);
    525573        $most_relevant_keyword = empty( $most_relevant_keyword ) ? $seo_links_all_keywords : $most_relevant_keyword;
    526574        $seo_links_keywords_filtered = get_post_meta( $post->ID, 'seo_links_keywords_filtered', true);
     575        $internal_links_keywords_filtered = get_post_meta( $post->ID, 'internal_links_keywords_filtered', true);
    527576        $seo_links_last_update = get_option( 'seo_links_last_update' );
    528577        ?>
     
    543592                        <?php
    544593                        $seo_keywords = array();
    545                         foreach( $seo_links_keywords_filtered as $seo_link ) :
    546                             //$seo_keywords[ $seo_link ] = $seo_links_keywords_position[$seo_link];
    547                             $seo_keywords[ $seo_link ] = $seo_links_keywords_impressions[$seo_link];
    548                         endforeach;
    549                         arsort( $seo_keywords );
    550                         ?>
    551                         <?php foreach( $seo_keywords as $seo_link => $seo_position ) : ?>
    552                             <tr class="seo_links_keywords_filtered">
    553                                 <td>
    554                                     <?php echo esc_html( $seo_link ); ?>
    555                                 </td>
    556                                 <td style="text-align: center;">
    557                                     <?php echo esc_html( $seo_position ); ?>
    558                                 </td>
    559                             </tr>
    560                         <?php endforeach; ?>
    561                         <tr class="seo_links_keywords_filtered">
    562                             <td colspan="2"><a href="javascript:void(0);" onclick="jQuery('.seo_keywords').show();jQuery('.seo_links_keywords_filtered').hide();">Show more keywords</a></td>
    563                         </tr>
    564                         <?php
    565                         $seo_keywords = array();
    566594                        foreach( $seo_links_keywords as $seo_link ) :
    567595                            //$seo_keywords[ $seo_link ] = $seo_links_keywords_position[$seo_link];
     
    571599                        ?>
    572600                        <?php foreach( $seo_keywords as $seo_link => $seo_position ) : ?>
    573                             <tr class="seo_keywords" style="display:none;">
     601                            <tr class="seo_keywords">
    574602                                <td>
    575603                                    <?php echo esc_html( $seo_link ); ?>
     
    603631                    <tbody>
    604632                    <?php
     633                    $internal_links = array();
     634                    $paginationLimit = 100;
     635                    if( !empty( $internal_links_keywords_filtered ) ) :
     636                        foreach( $internal_links_keywords_filtered as $internal_link ) :
     637                            $internal_links[ $internal_link ] = $seo_links_keywords_impressions[ $internal_link ];
     638                        endforeach;
     639                        arsort( $internal_links );
     640                        ?>
     641                        <?php foreach( $internal_links as $seo_link => $seo_position ) : ?>
     642                            <tr class="internal_links_keywords_filtered">
     643                                <td>
     644                                    <?php echo esc_html( $seo_link ); ?>
     645                                </td>
     646                                <td style="text-align: center;">
     647                                    <?php echo esc_html( $seo_position ); ?>
     648                                </td>
     649                            </tr>
     650                        <?php endforeach; ?>
     651                        <tr class="internal_links_keywords_filtered paginate">
     652                            <td colspan="2"><a href="javascript:void(0);" onclick="paginateInternalLinks()">Show more keywords</a></td>
     653                        </tr>
     654                    <?php endif; ?>
     655
     656                    <?php
    605657                        $internal_links = array();
    606658                        foreach( $most_relevant_keyword as $seo_link ) :
     
    610662                        arsort( $internal_links );
    611663                    ?>
     664                    <?php $j = 0; ?>
    612665                    <?php foreach( $internal_links as $seo_link => $seo_position ) : ?>
    613                         <tr>
     666                        <?php
     667                        $display = '' ;
     668                        if( !empty( $internal_links_keywords_filtered ) ) :
     669                            $display = 'display:none;';
     670                        endif;
     671                        if( $j++ >= $paginationLimit ) :
     672                            $display = 'display:none;';
     673                        endif;
     674                        ?>
     675                        <tr class="internal_links" style="<?php echo $display; ?>">
    614676                            <td>
    615677                                <?php echo esc_html( $seo_link ); ?>
     
    625687                        </tr>
    626688                    <?php endforeach; ?>
     689                    <?php if( count( $internal_links )  > $paginationLimit ) : ?>
     690                        <?php
     691                            if( count( $internal_links_keywords_filtered ) == 0 ) :
     692                                $display = '';
     693                            endif;
     694                        ?>
     695                    <tr class="internal_links paginate" style="<?php echo $display; ?>">
     696                        <td colspan="2"><a href="javascript:void(0);" onclick="paginateInternalLinks()">Show more keywords</a></td>
     697                    </tr>
     698                    <?php endif; ?>
    627699                    </tbody>
    628700                </table>
Note: See TracChangeset for help on using the changeset viewer.