bueltge
11/15/2012 - 9:09 PM

WordPress SSL

WordPress SSL

## .htaccess
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{SERVER_PORT} !^443$
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

## wp-config.php
define( 'FORCE_SSL_LOGIN', TRUE );
define( 'FORCE_SSL_ADMIN', TRUE );

## Plugin
WordPress HTTPS
(http://wordpress.org/extend/plugins/wordpress-https/)

## Specific Page/Post for SSL
/**
 * Plugin Name: Force SSL for specific pages
 * Description: 
 * Text Domain: 
 * Domain Path: /languages
 * Author:      Frank B&uuml;ltge
 * Author URI:  http://bueltge.de/
 * Donate URI:  http://bueltge.de/wunschliste/
 * Version:     1.0.0
 */

! defined( 'ABSPATH' ) and exit;

if ( ! function_exists( 'fb_force_ssl' ) ) {
	
	add_filter( 'force_ssl' , 'fb_force_ssl', 1, 3 );
	function fb_force_ssl( $force_ssl, $id = 0, $utrl = '' ) {
		// A list of posts that should be SSL
		$ssl_posts = array( 22, 312 );
		
		if ( in_array( $id, $ssl_posts ) )
			$force_ssl = TRUE;
			
		return $force_ssl;
	}

} // end if func exists

## Without Plugin WordPress HTTPS
add_action( 'template_redirect', 'fb_ssl_template_redirect', 1 );
function fb_ssl_template_redirect() {
	
	if ( is_page( 123 ) && ! is_ssl() ) {
	
		if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
			wp_redirect(preg_replace('|^http://|', 'https://', $_SERVER['REQUEST_URI']), 301 );
			exit();
		} else {
			wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
			exit();
		}
	} else if ( !is_page( 123 ) && is_ssl() && !is_admin() ) {
	
		if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
			wp_redirect(preg_replace('|^https://|', 'http://', $_SERVER['REQUEST_URI']), 301 );
			exit();
		} else {
			wp_redirect('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
			exit();
		}
	}
}


or a smaller version, but not with fallbacks, if the url is wrong

add_filter( 'pre_post_link', 'fb_set_ssl_url', 10, 3 );
function fb_set_ssl_url( $permalink, $post, $leavename ) {
	
	if ( 123 == $post->ID )
		return preg_replace( '|^http://|', 'https://', $permalink );
	
	return $permalink;
}