web-dev-qa-db-fra.com

Comment lister toutes les URL externes que j'ai postées sur mon blog WordPress?

Je veux lister tous les liens externes de mes messages dans un seul endroit/fichier. Comment puis-je atteindre cet objectif?

  • Est-il possible d'y parvenir via un plugin?

  • Est-il possible d'y parvenir avec une API wordpress intégrée?

  • Est-il possible d'y parvenir via un outil tiers gratuit?

Quelle approche faut-il suivre pour y parvenir?

1
Nadeem Khan

Créez une page avec les liens de noms. Pages >> Add New dans votre panneau wordpress. Nommez-le simplement links et publiez. Voir ci-dessous.

enter image description here

Allez maintenant dans votre dossier de thèmes wp-content\themes\YOUR_ACTIVE_THEME_FOLDER et créez une page page-links.php.

Et collez ce code dans page-links.php

<?php  

$the_query = new WP_Query(array('post_type' => 'post'));
while($the_query->have_posts()):
    $the_query->the_post();
    $_post_id = get_the_id();

//Write Site URL below.
//Don't write http:// or anything like that. just domain.com or domain.net
$_site_url = 'google.com';

//Getting Post content
$_post_content =  get_post_field( 'post_content', $_post_id);


$site_parts = explode('.',$_site_url);
$site_suffix = '.'.$site_parts[1];
//Using regular expression to match hyperlink
preg_match_all('|<a.*(?=href=\"([^\"]*)\")[^>]*>([^<]*)</a>|i', $_post_content, $match);

foreach($match[0] as $link){
    //Filtering out internal links
    $parts = explode($site_suffix, $link);
    $domain = explode('//',$parts[0]);
    //echo $domain[1];
    if ($domain[1] != 'www.'.$site_parts[0] && $domain[1] != $site_parts[0]  ){
        echo $link.'<br>';
    }
}

endwhile;
    wp_reset_postdata();
?>

Vous devez maintenant modifier le code ci-dessus.

    //Write Site URL below.
//Don't write http:// or anything like that. just domain.com or domain.net
$_site_url = 'google.com';

À la place de $_site_url = 'google.com';, écrivez votre propre domaine. Assurez-vous que c'est sans www et sans http: //

Regardez la page.

REMARQUE: toutes les pages liées en interne sont évitées, seules les pages liées à des sites externes seront visibles.

Personnaliser le code pour le nécessaire.

4
Sudeep K Rana

Le code ci-dessus avait des problèmes de pagination lorsque je voulais analyser chaque page. Donc, en partant de ce qui précède, plus d’un kicker pour rechercher des liens sans attributs 'nofollow', j’ai proposé ce qui suit:

<ol>
<?php 

global $post;

//Write Site URL below.
//Don't write http:// or anything like that. just domain.com or domain.net
$_site_url = 'google.com';

$args = array(
    'posts_per_page'   => 9999999999,
    'offset'           => 0,
    'category'         => '',
    'category_name'    => '',
    'orderby'          => 'ID',
    'order'            => 'DESC',
    'include'          => '',
    'exclude'          => '',
    'meta_key'         => '',
    'meta_value'       => '',
    'post_type'        => 'post',
    'post_mime_type'   => '',
    'post_parent'      => '',
    'author'       => '',
    'author_name'      => '',
    'post_status'      => 'publish',
    'suppress_filters' => true 
);
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); 

  //Get Post content
  $_post_content =  get_the_content();

  $site_parts = explode('.',$_site_url);
  $site_suffix = '.'.$site_parts[1];

  //Using regular expression to match hyperlink
  preg_match_all('|<a.*(?=href=\"([^\"]*)\")[^>]*>([^<]*)</a>|i', $_post_content, $match);

  foreach($match[0] as $link){
    //Filtering out internal links
    $parts = explode($site_suffix, $link);
    $domain = explode('//',$parts[0]);
    //echo $domain[1];
    if ($domain[1] != 'www.'.$site_parts[0] && $domain[1] != $site_parts[0] && strpos($link, 'nofollow') === FALSE){
        echo '<li><a href="'.get_permalink($post->ID) . '">' . get_the_title() .'</a>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'. $link.'</li>';
    }
  }

endforeach;
wp_reset_postdata(); 

?>
</ol>
1
pennstump