← WordPress

Dúvidas de estrutura Wordpress

Lida 3316 vezes

Offline

Ivo Pereira 
Membro
Mensagens 661 Gostos 1
Feedback +7

Troféus totais: 27
Trófeus: (Ver todos)
Linux User Super Combination Combination Topic Starter Level 5 Level 4 Level 3 Level 2 Level 1 500 Posts

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
Offline

Ivo Pereira 
Membro
Mensagens 661 Gostos 1
Feedback +7

Troféus totais: 27
Trófeus: (Ver todos)
Linux User Super Combination Combination Topic Starter Level 5 Level 4 Level 3 Level 2 Level 1 500 Posts

Fui eu que fui pouco explícito ou ninguém sabe mesmo?  :-k
Offline

Bruno Gaspar 
Membro
Mensagens 242 Gostos 1
Feedback +3

Troféus totais: 18
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 3 Level 2 Level 1 100 Posts 50 Posts 10 Posts

Offline

Ivo Pereira 
Membro
Mensagens 661 Gostos 1
Feedback +7

Troféus totais: 27
Trófeus: (Ver todos)
Linux User Super Combination Combination Topic Starter Level 5 Level 4 Level 3 Level 2 Level 1 500 Posts

Isso já tinha visto, não percebo é onde é feito o include...
Offline

João Godinho 
Membro
Mensagens 1755 Gostos 2
Troféus totais: 27
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Como onde é feito o include?
Offline

Bruno Gaspar 
Membro
Mensagens 242 Gostos 1
Feedback +3

Troféus totais: 18
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 3 Level 2 Level 1 100 Posts 50 Posts 10 Posts

Pode estar a ser incluído de forma automática.
Offline

Ivo Pereira 
Membro
Mensagens 661 Gostos 1
Feedback +7

Troféus totais: 27
Trófeus: (Ver todos)
Linux User Super Combination Combination Topic Starter Level 5 Level 4 Level 3 Level 2 Level 1 500 Posts

Ele algures há-de ter um "<?php include('RESULTADO_DA_FUNÇÃO_AQUI') ?>

em RESULTADO_DA_FUNÇÃO_AQUI, inserir por exemplo o get_header(), ou o get_footer().

Tipo, ele há-de ter algum código que faça o include ao resultado de uma função que retorna o conteúdo de uma posição. Mas onde está esse include?
Offline

Bruno Mota 
Membro
Mensagens 1733 Gostos 3
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

pesquisa por MVC
Offline

Diogo Pinto 
Administrador
Mensagens 4400 Gostos 371
Feedback +4

Troféus totais: 37
Trófeus: (Ver todos)
Avatar Search Level 6 Linux User Mobile User Super Combination Combination Topic Starter 50 Poll Votes 10 Poll Votes

Na minha opinião, acho que deverias apostar em Code Igniter... Uma excelente framework.
Offline

kaydara 
Membro
Mensagens 616 Gostos 1
Feedback +1

Troféus totais: 21
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 500 Posts 100 Posts

as frameworks tem dessas coisas... parece magia

ou realmente entendes como funciona o conceito ou nunca mais encontras isso.

já martelei tantos wp e por acaso nunca tive essa necessidade.

Se quiseres usar uma arma de matar elefantes facilmente sabes onde ele é incluído com strace, mas faz de conta que não disse isto...
Offline

diogoosorio 
Membro
Mensagens 134 Gostos 1
Feedback +1

Troféus totais: 22
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

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:

Código: (php) [Seleccione]
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:

Código: (php) [Seleccione]
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!
Offline

Ivo Pereira 
Membro
Mensagens 661 Gostos 1
Feedback +7

Troféus totais: 27
Trófeus: (Ver todos)
Linux User Super Combination Combination Topic Starter Level 5 Level 4 Level 3 Level 2 Level 1 500 Posts

Ena, tanta resposta, mas penso que o diogoosorio foi o que realmente percebeu o que queria.

Estou a estudar as funcionalidades de implementação de layout (por agora) do próprio WP, e reparei que juntavam inúmeras funções numa só classe, pelo que andava a tentar descobrir onde estavam as relações com cada classe e onde e como era implementada cada uma.

Agora estou no trabalho, mas mais logo escrevo uma resposta mais completa.

Até me metia pelo uso de frameworks, mas tenho que apresentar o projecto em meados de Junho, e não sei se tenho tempo de aprender a trabalhar com uma de forma a ter um projecto com uma boa nota, se me percebem :)
Offline

Diogo Pinto 
Administrador
Mensagens 4400 Gostos 371
Feedback +4

Troféus totais: 37
Trófeus: (Ver todos)
Avatar Search Level 6 Linux User Mobile User Super Combination Combination Topic Starter 50 Poll Votes 10 Poll Votes

Até me metia pelo uso de frameworks, mas tenho que apresentar o projecto em meados de Junho, e não sei se tenho tempo de aprender a trabalhar com uma de forma a ter um projecto com uma boa nota, se me percebem :)

Achas mais fácil começar de raíz do que começar por uma framework? As frameworks surgem mesmo para te oferecerem uma forma segura de te poupar muito trabalho. Sobre o codeigniter, tudo o que precisas de saber para criares o teu próprio CMS: http://net.tutsplus.com/sessions/codeigniter-from-scratch/
Offline

Ivo Pereira 
Membro
Mensagens 661 Gostos 1
Feedback +7

Troféus totais: 27
Trófeus: (Ver todos)
Linux User Super Combination Combination Topic Starter Level 5 Level 4 Level 3 Level 2 Level 1 500 Posts

Sempre programei à "hard-core" :) daí não conhecer totalmente as frameworks. Já não é a primeira vez que tentava aprender e acabava por não continuar.

Mas realmente, penso que dá muito jeito, falta-me é começar a programar mesmo algo nela.