Plugin = Preview URL

LeoColomb edited this page Jun 3, 2013 · 3 revisions

Add the character '~' to a short URL to display a preview screen before redirection

Install

  • In /user/plugins, create a new folder named preview-urls
  • In this new directory, create a blank file named plugin.php
  • In this new file, cut and paste the following code
  • Go to the Plugins administration page and activate the plugin

Code

<?php
/*
Plugin Name: Preview URL
Plugin URI: http://yourls.org/
Description: Preview URLs before you're redirected there
Version: 1.0
Author: Ozh
Author URI: http://ozh.org/
*/

// EDIT THIS

// Character to add to a short URL to trigger the preview interruption
define( 'OZH_PREVIEW_CHAR', '~' );

// DO NO EDIT FURTHER

// Handle failed loader request and check if there's a ~
yourls_add_action( 'loader_failed', 'ozh_preview_loader_failed' );
function ozh_preview_loader_failed( $args ) {
        $request = $args[0];
        $pattern = yourls_make_regexp_pattern( yourls_get_shorturl_charset() );
        if( preg_match( "@^([$pattern]+)".OZH_PREVIEW_CHAR."$@", $request, $matches ) ) {
                $keyword   = isset( $matches[1] ) ? $matches[1] : '';
                $keyword = yourls_sanitize_keyword( $keyword );
                ozh_preview_show( $keyword );
                die();
        }
}

// Show the preview screen for a short URL
function ozh_preview_show( $keyword ) {
        require_once( YOURLS_INC.'/functions-html.php' );
        
        yourls_html_head( 'preview', 'Short URL preview' );
        yourls_html_logo();

        $title = yourls_get_keyword_title( $keyword );
        $url   = yourls_get_keyword_longurl( $keyword );
        $base  = YOURLS_SITE;
        $char  = OZH_PREVIEW_CHAR;
        
        echo <<<HTML
        <h2>Link Preview</h2>
        <p>You requested the short URL <strong><a href="$base/$keyword">$base/$keyword</a></strong></p>
        <p>This short URL points to:</p>
        <ul>
        <li>Long URL: <strong><a href="$base/$keyword">$url</a></strong></li>
        <li>Page title: <strong>$title</strong></li>
        </ul>
        <p>If you still want to visit this link, please <strong><a href="$base/$keyword">click here</a></strong>.</p>
        
        <p>Thank you for using our shortening service.</p>
HTML;
        
        yourls_html_footer();
}

More

If you want a TinyURL-like preview (with a preview.domain.com subdomain) you will need to modify your server virtual hosts settings. This is not just a matter of a plugin or a .htaccess rule.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.