How to list all external URLs that I have posted on my WordPress blog?
-
22-04-2021 - |
Domanda
I want to list all the external links of my posts in a single place/file. How can I achieve this?
Is it possible to achieve this via a plugin?
Is it possible to achieve this with a built-in wordpress api?
Is it possible to achieve this via some free 3rd party tool?
What approach should be followed for achieving this?
Soluzione
The above code had pagination concerns when I wanted to parse each and every page. So, building on the above, plus a kicker to search for links without 'nofollow' attributes, I came up with the following:
<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>, '. $link.'</li>';
}
}
endforeach;
wp_reset_postdata();
?>
</ol>
Altri suggerimenti
Create a page with the name links. Pages >> Add New
into your wordpress panel. Just name it links
and publish. See below.
Now go to your theme folder wp-content\themes\YOUR_ACTIVE_THEME_FOLDER
and create a page page-links.php
.
And paste this code in 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();
?>
Now you need to make a change in the code above.
//Write Site URL below.
//Don't write http:// or anything like that. just domain.com or domain.net
$_site_url = 'google.com';
In place of $_site_url = 'google.com';
write your own domain. Make sure it's without www and without http://
Have a look at the page.
NOTE: All pages that are linked internally are avoided, only pages that are linked to external sites will be visible.
Customize code for the needful.