Skip to content

Instantly share code, notes, and snippets.

@nikolov-tmw
Last active December 25, 2015 08:38
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nikolov-tmw/8d803ea9b4adfbd7e221 to your computer and use it in GitHub Desktop.
Save nikolov-tmw/8d803ea9b4adfbd7e221 to your computer and use it in GitHub Desktop.
Sample member pages plugin
<?php
/*
Plugin Name: Test Plugin
*/
function analytics_rewrite_add_var( $vars ) {
$vars[] = 'member';
return $vars;
}
add_filter( 'query_vars', 'analytics_rewrite_add_var' );
function add_analytic_rewrite_rule(){
add_rewrite_tag( '%member%', '([^&]+)' );
add_rewrite_rule(
'^member/([^/]*)/?',
'index.php?member=$matches[1]',
'top'
);
}
add_action( 'init', 'add_analytic_rewrite_rule' );
function my_parse_request( $wp ) {
if ( ! is_admin() ) {
if ( isset( $wp->query_vars['member'] ) && $wp->query_vars['member'] ) {
$member = get_user_by( 'login', $wp->query_vars['member'] );
if ( false !== $member ) {
global $_current_member;
$_current_member = $member;
$wp->query_vars['page_id'] = get_my_page_id();
add_filter( 'the_title', 'my_title_filter', 0, 2 );
add_filter( 'single_post_title', 'my_title_filter', 0, 2 );
add_filter( 'the_content', 'my_content_filter', 0, 2 );
} else {
// Set a 404 error
$wp->query_vars['error'] = '404';
}
}
}
}
add_filter( 'parse_request', 'my_parse_request', 10 );
function my_title_filter( $title, $id = false ) {
global $_current_member;
$id = is_object( $id ) ? $id->ID : $id;
if ( $id == get_my_page_id() && isset( $_current_member ) ) {
$search = array(
'%FNAME%',
'%LNAME%',
'%DNAME%',
'%UNAME%',
'%UID%',
);
$replace = array(
$_current_member->first_name,
$_current_member->last_name,
$_current_member->display_name,
$_current_member->user_login,
$_current_member->ID,
);
// Allow the user to define some placeholders in the page title
// That will be replaced with the correct data for the displayed user
return str_replace( $search, $replace, $title );
}
return $title;
}
function my_content_filter( $content, $id = false ) {
global $_current_member;
if ( ( $id == get_my_page_id() || get_the_ID() == get_my_page_id() ) && isset( $_current_member ) ) {
ob_start();
include_once( 'member.php' );
return apply_filters( 'my_plugin_member_output', ob_get_clean(), $_current_member );
}
return $content;
}
function get_my_page_id() {
// Cache the ID
static $page_id;
if ( isset( $page_id ) ) {
return $page_id;
}
// Change this to $page_id = get_option( 'my_profile_page_id' );
$page_id = 2;
return $page_id;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment