Vou criar um CMS um pouco diferente do habitual, e que serve os meus próprios interesses para o meu projecto de final de ano, e andei a estudar outros gestores de conteúdos, daí me ter chamado à atenção a forma como o Wordpress é organizado.
Por exemplo, a função get_header();, onde é que faz o include do próprio header?
http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/general-template.php
Respondendo directamente à questão, é só escarafunchar um pouco o core do bicho. A documentação do WP até é bastante aceitável, nem foi necessário abrir o IDE para tentar apanhar a declaração das funções.
Ok, ficheiro
wp-includes/general-template.php, linha 24:
function get_header( $name = null ) {
do_action( 'get_header', $name );
$templates = array();
if ( isset($name) )
$templates[] = "header-{$name}.php";
$templates[] = 'header.php';
// Backward compat code will be removed in a future release
if ('' == locate_template($templates, true))
load_template( ABSPATH . WPINC . '/theme-compat/header.php');
}
load_template, ficheiro
wp-includes/theme.php, linha 1108:
function load_template( $_template_file, $require_once = true ) {
global $posts, $post, $wp_did_header, $wp_did_template_redirect, $wp_query, $wp_rewrite, $wpdb, $wp_version, $wp, $id, $comment, $user_ID;
if ( is_array( $wp_query->query_vars ) )
extract( $wp_query->query_vars, EXTR_SKIP );
if ( $require_once )
require_once( $_template_file );
else
require( $_template_file );
}
Não tem nada de mágico, nem nada de obscuro. WordPress não é um pedaço de código perfeito, mas é bastante aceitável (bastante mesmo). As coisas estão bem estruturadas, o código é limpo, segue normativas e está muito bem comentado (o que é uma raridade em projectos Open Source).
A ideia de uma framework é exactamente essa, abstrair quem está a desenvolver de tarefas rotineiras, tal como "carregar uma view". Não almejes conhecer o núcleo do WordPress a fundo, é demasiado extenso e modificado por demasiadas pessoas para lá chegares em tempo útil - e é exactamente essa a beleza do projecto. A ideia aqui é conheceres a API que eles oferecem, a fundo.
Na eventualidade de encontrares algo que não está a funcionar como devia, ou algo que tu penses que poderia funcionar de outra forma, ai sim levantas o "capot", e escarafunchas o coração do bicho. Mas não vás procurar todas as funções que utilizas, senão não fazes mais nada durante 6 meses...
Para o teu projecto a minha recomendação seria olhares para o WP (já percebi que é a tua referência), lista o conjunto de funcionalidades que gostarias de implementares vai atrás desses pontos em particular no core do WP apenas.
No caso do WP uma grande lacuna (isto de um gajo que já fez uma boa dezena de projectos sobre WP) é que muitas vezes não existe uma separação clara entre lógica e layout. Isto é especialmente verdade no backend - é-me horripilante sempre que tenho de colocar uma "porrada" de HTML dentro de código PHP.
MVC foi a melhor invenção do Mundo a seguir ao chocolate, ainda que o WP ofereça mecanismos de separação, nomeadamente no desenvolvimento do tema, o próprio core do sistema não segue este padrão de desenho (nem o implementa forçosamente).
Planeia bem, escolhe as ferramentas que vais utilizar, monta um sistema de revisão de código (porque não publicar isso no GitHub, até é mais fácil de ajudar se "encalhares" em algum momento).
Lista as funcionalidades todas a implementar. Converte as funcionalidades em classes e estabelece as relações entre elas (se souberes UML tanto melhor - tanto para ti, como para depois mostrares o processo ao professor). Quando estiveres seguro e confortável com o que vais montar, então atira-te ao código.
Boa sorte!