( Nota dos moderadores: o título era originalmente "Como posso adicionar o seletor" Atributos da página "e / ou" Atributos da página> Modelo "ao editor do POSTS")
O WP atualmente permite apenas a atribuição de um "modelo" para o Pages (ou seja, post_type=='page'
.). Gostaria de estender essa funcionalidade a Postagens também (por exemplo post_type=='post'
.)
Como posso adicionar o caixa de meta "Atributos da página" e, mais especificamente, o alternador de modelos ao editor de postagens?
Estou assumindo que este é um código que colocarei no meu functions.php
para o meu tema.
ATUALIZAÇÃO: Consegui adicionar o menu suspenso de modelos codificados no meu editor de postagem, simplesmente adicionando o html da caixa de seleção à minha caixa de meta opções personalizada existente. Aqui está o código que estou usando para isso ...
add_meta_box('categorydiv2', __('Post Options'), 'post_categories_meta_box_modified', 'post', 'side', 'high');
E aqui está a função que escreve as opções e a caixa de seleção de modelo ...
//adds the custom categories box
function post_categories_meta_box_modified() {
global $post;
if( get_post_meta($post->ID, '_noindex', true) ) $noindexChecked = " checked='checked'";
if( get_post_meta($post->ID, '_nofollow', true) ) $nofollowChecked = " checked='checked'";
?>
<div id="categories-all" class="ui-tabs-panel">
<ul id="categorychecklist" class="list:category categorychecklist form-no-clear">
<li id='noIndex' class="popular-category"><label class="selectit"><input value="noIndex" type="checkbox" name="chk_noIndex" id="chk_noIndex"<?php echo $noindexChecked ?> /> noindex</label></li>
<li id='noFollow' class="popular-category"><label class="selectit"><input value="noFollow" type="checkbox" name="chk_noFollow" id="chk_noFollow"<?php echo $nofollowChecked ?> /> nofollow</label></li>
</ul>
<p><strong>Template</strong></p>
<label class="screen-reader-text" for="page_template">Post Template</label><select name="page_template" id="page_template">
<option value='default'>Default Template</option>
<option value='template-wide.php' >No Sidebar</option>
<option value='template-salespage.php' >Salespage</option>
</select>
</div>
<?php
}
E, finalmente, o código para capturar os valores selecionados ao salvar ...
function save_post_categories_meta($post_id) {
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id;
$noIndex = $_POST['chk_noIndex'];
$noFollow = $_POST['chk_noFollow'];
update_post_meta( $post_id, '_noindex', $noIndex );
update_post_meta( $post_id, '_nofollow', $noFollow );
return $post_id;
}
Agora, acredito que tudo o que resta é (1) capturar o modelo selecionado e adicioná-lo à meta da postagem para esta postagem e (2) modificar index.php e single.php para que ele use o modelo escolhido.
fonte
Respostas:
Odeio ser portador de más notícias, mas o WordPress codifica a funcionalidade do Modelo de Página para a "página" tipo de postagem , pelo menos na v3.0 (que pode mudar em versões futuras, mas não há uma iniciativa específica que eu saiba mudar) Portanto, esta é uma das poucas vezes em que estou lutando para descobrir como contornar algo sem invadir o núcleo.)
A solução que eu encontrei é basicamente copiar o código relevante do núcleo do WordPress e modificá-lo de acordo com nossas necessidades. Aqui estão as etapas (os números de linha são da v3.0.1):
Copie a
page_attributes_meta_box()
função da linha 535/wp-admin/includes/meta-boxes.php
e modifique para se adequar.Codifique um
add_meta_boxes
gancho para adicionar o metabox criado em # 1.Copie a
get_page_templates()
função da linha 166 de/wp-admin/includes/theme.php
e modifique para se adequar.Copie a
page_template_dropdown()
função da linha 2550 de/wp-admin/includes/template.php
e modifique para se adequar.Adicionar um modelo de postagem ao seu tema.
Codifique um
save_post
gancho para permitir o armazenamento do nome do arquivo do modelo de postagem ao salvar.Codifique um
single_template
gancho para permitir o carregamento do modelo de postagem para as postagens associadas.Agora vamos lá!
1. Copie o
page_attributes_meta_box()
funçãoComo nosso primeiro passo, você precisa copiar a
page_attributes_meta_box()
função da linha 535/wp-admin/includes/meta-boxes.php
e escolhi renomeá-lapost_template_meta_box()
. Como você solicitou apenas modelos de página, omiti o código para especificar uma postagem pai e para especificar a ordem que torna o código muito mais simples. Também escolhi usar o postmeta para isso em vez de tentar reutilizar apage_template
propriedade do objeto para evitar possíveis incompatibilidades causadas por acoplamentos não intencionais. Então aqui está o código:2. Codifique um
add_meta_boxes
ganchoO próximo passo é adicionar o metabox usando o
add_meta_boxes
gancho:3. Copie a
get_page_templates()
funçãoEu assumi que faria sentido diferenciar entre modelos de página e modelo de postagem, portanto, a necessidade de uma
get_post_templates()
função baseada naget_page_templates()
linha 166 de/wp-admin/includes/theme.php
. Mas em vez de usar oTemplate Name:
marcador, os modelos de página que usam essa função usam umPost Template:
marcador, que você pode ver abaixo.Eu também filtrados inspeção de
functions.php
(não sei comoget_page_templates()
nunca funcionou corretamente sem isso, mas o que quer!) E a única coisa que resta é a referências de mudança para a palavrapage
parapost
a manutenção legibilidade na estrada:4. Copie o
page_template_dropdown()
funçãoDa mesma forma, copie
page_template_dropdown()
da linha 2550 de/wp-admin/includes/template.php
para criarpost_template_dropdown()
e simplesmente altere-a para chamarget_post_templates()
:5. Adicione um modelo de postagem
O próximo passo é adicionar um modelo de postagem para teste. Usando o
Post Template:
marcador mencionado na etapa # 3, copiesingle.php
do seu tema parasingle-test.php
e adicione o seguinte cabeçalho de comentário (não se esqueça de modificar algosingle-test.php
para poder dizer que ele está carregando em vez desingle.php
) :Depois de executar as etapas de 1 a 5, você poderá ver a metabox "Modelos de postagem " na página do editor de postagem:
(fonte: mikeschinkel.com )
6. Codifique um
save_post
ganchoAgora que você tem o editor ao lado, é necessário salvar o nome do arquivo do modelo da página no postmeta quando o usuário clicar em "Publicar". Aqui está o código para isso:
7. Codifique um
single_template
ganchoE, finalmente, você precisa realmente obter o WordPress para usar seus novos modelos de postagem. Você faz isso conectando
single_template
e retornando o nome do modelo desejado para as postagens às quais foi atribuída uma:E é isso!
OBSERVAÇÃO : não levei em consideração apenas os Tipos de postagem personalizados
post_type=='post'
. Na minha opinião, abordar tipos de postagem personalizados exigiria diferenciação entre os diferentes tipos de postagem e, embora não seja muito difícil, não tentei isso aqui.fonte
O Wordpress permite que você adicione Meta às categorias usando um plugin:
Para fazer isso, você precisa adicionar uma das várias extensões que adicionam meta às categorias (imitando quais páginas saem da caixa), o Simple Term Meta faz o trabalho corretamente.
NB WordPress 3.x é necessário para estender categorias.
Depois disso, você pode usar:
Use Functions.php para adicionar métodos para fazer o que você deseja, por exemplo
É fácil chamar novos campos em temas:
Mais detalhes e exemplos: http://www.wphub.com/adding-metadata-taxonomy-terms/
fonte