settings = (object) Cache::get_json_settings();
add_filter( 'the_content', array( $this, 'check_links' ), 100 );
}
public function check_links( $content) {
preg_match_all('/]*\bclass\s*=\s*["\'][^"\']*\bbetterlinks-linked-text\b[^"\']*["\'][^>]*>(.*?)<\/a>/i', $content, $matches, PREG_OFFSET_CAPTURE);
$next = 0;
foreach ($matches[0] as $match) {
$linkId = $this->get_string_text( $match[0], 'data-link-id' );
if( empty( $linkId ) ) {
continue;
}
$link = self::get_link_by_ID(intval($linkId));
$this->link = is_array( $link ) ? current( $link ) : false;
if( empty( $this->link ) ) continue;
$href = $this->get_string_text( $match[0], 'href' );
if( empty( $href ) ) {
continue;
}
$href = $this->check_hrefs($href);
$pattern = '/(]*href\s*=\s*["\'])([^"\']*)(["\'][^>]*>)/i';
$replacement = '${1}' . $href . '${3}';
$replace = preg_replace($pattern, $replacement, $match[0]);
// if( empty( $this->link['uncloaked'] ) ){
// $pattern = '/\s*data-link-id=["\'][^"\']*["\']/i';
// $replace = preg_replace($pattern, '', $replace);
// }
// error_log( print_r( $this->link, true ) );
$match[1] = $match[1] + $next;
$content = substr_replace( $content , $replace , $match[1] , strlen( $match[0] ) );
$next = $next + strlen( $replace ) - strlen( $match[0] );
}
return $content;
}
private function get_string_text($string, $attr){
preg_match('/'. $attr .'="([^"]+)"/', $string, $matches);
if( empty( $matches ) ) return '';
$value = explode('=', $matches[0]);
if( empty( $value[1] ) ) return '';
$value = trim($value[1], '"');
return $value;
}
private function check_hrefs($href) {
// error_log( print_r( $this->link, true ) );
if( !empty( $this->link['uncloaked'] ) ){
if( $href !== $this->link['target_url'] ){
$href = $this->link['target_url'];
}
}else {
$short_url = site_url('/');
// error_log( print_r( $this->link['short_url'], true ) );
// $short_url .= !empty( $this->settings->prefix ) ? $this->settings->prefix . '/' . $this->link['short_url'] : $this->link['short_url'];
$short_url .= $this->link['short_url'];
if( $href !== $short_url) {
$href = $short_url;
}
}
return $href;
}
}