Q:

Wordpress Profile File / Page

I would like to create a file in the Wordpress theme, where i will add my own code, edit profile, show profile information, and perhaps an ability to insert posts / meta data programmatically.
So it needs to be www.mysite.com/profile.php or www.mysite.com/profile/
I do not want to use Buddy Press or any other plugin.
I know how the template system works, i do not want a page template.
It will probably be a class, later on, i do not want to change .htaccess file, and if i must i would appreciated filter function how to do this from functions.php
Basically just a simple .php file i can link to, located in theme root.
include('../../../wp-load.php');
and write any code i would like to.
Any creative solution that is not too "hacky" would be appreciated. 
Spent around 2 days googling bashing my head on this, before i decided to ask question.
Thank you very much.

A:

Ok, I managed to do this, took me 2 days to figure it out. Here is how I managed to do it:

Make a plugin folder.
In that plugin folder make 1x php file. so index.php

Ok so first thing we need to register plugin I did it like this, in your index.php paste
this code.
        function activate_profile_plugin() {

         add_option( 'Activated_Plugin', 'Plugin-Slug' );

         /* activation code here */
          }
        register_activation_hook( __FILE__, 'activate_profile_plugin' );

Then we need a function when you register a plugin only once register profile pages.
       function create_profile_page( $title, $slug, $post_type, $shortcode, $template = null ) {
    //Check if the page with this name exists.
     if(!get_page_by_title($title)) {
         // if not :
          $page_id = -1;
        $page_id = wp_insert_post(
            array(
                'comment_status'    =>   'open',
                'ping_status'       =>   'open',
                'post_content' => $shortcode,
                'post_author'       =>   1,   // Administrator is creating the page
                'post_title'        =>   $title,
                'post_name'     =>   strtolower( $slug ),
                'post_status'       =>   'publish',
                'post_type'     =>   strtolower( $post_type )
            )
        );
        // If a template is specified in the function arguments, let's apply it
        if( null != $template ) {
            update_post_meta( get_the_ID(), '_wp_page_template', $template );
        } // end if
    return $page_id;
       }     
 } 

Ok so we created function which programatically register pages. It has 5 paramethers.

is Title
Slug
Post type
Shortcode.
Template

For the shortcode template you need to make a shortcode with the complete page output
and add it as a parameter to this function, so for registration page it will be a shortcode with the registration forms etc.
For example : 
      function registration_shortcode(){
      echo 'Wellcome to Registration page';
      }
      add_shortcode('registration_output', 'registration_shortcode');

Next thing we need to call it once only when plugin loads. 
so we do this : 
      function load_plugin() {
      if ( is_admin() && get_option( 'Activated_Plugin' ) == 'Plugin-Slug' ) {

       delete_option( 'Activated_Plugin' );

        /* do stuff once right after activation */
        // example: add_action( 'init', 'my_init_function' );
         create_profile_page('Registration', 'registration', 'page', '[registration_output]');
        create_profile_page('Profile', 'profile', 'page', '[profile_shortcode]');
        create_profile_page('Profil Edit', 'profile-edit', 'page', '[edit_shortcode]');
        }
        }
        add_action( 'admin_init', 'load_plugin' );

Ok so this will execute only once when plugin loads and it will create 3 Pages, which are Profile, Registration and Profile Edit.
And that's it, you have your front-end user profile blank pages, and you can write page output in shortcodes ,create more pages, put any forms or elements you like and create decent profile (which doesn't have any stuff you don't need in it like plugins. )
Hope this helps, it was painful for me to figure this out. Cheers!

