( Note des modérateurs: le titre était à l'origine "Comment puis-je ajouter le sélecteur" Attributs de page "et / ou" Attributs de page> Modèle "à l'éditeur POSTS")
WP n'autorise actuellement que l'attribution d'un "modèle" aux pages (c'est-à-dire post_type=='page'
.) J'aimerais également étendre cette fonctionnalité aux publications (c'est-à-dire post_type=='post'
.)
Comment puis-je ajouter la boîte de méta "Attributs de page" et plus spécifiquement, le sélecteur de modèle à l'éditeur de messages?
Je suppose que c'est du code que je mettrai dans mon functions.php
pour mon thème.
MISE À JOUR: J'ai réussi à ajouter le menu déroulant des modèles codés en dur à mon éditeur de publication, en ajoutant simplement la case de sélection html à ma boîte de méta-options personnalisée existante. Voici le code que j'utilise pour cela ...
add_meta_box('categorydiv2', __('Post Options'), 'post_categories_meta_box_modified', 'post', 'side', 'high');
Et voici la fonction qui écrit les options et la boîte de sélection de modèle ...
//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
}
Et enfin, le code pour capturer les valeurs sélectionnées lors de la sauvegarde ...
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;
}
Maintenant, je crois que tout ce qui reste est (1) capturer le modèle sélectionné et l'ajouter à la méta du post pour ce post et (2) modifier index.php et single.php pour qu'il utilise le modèle choisi.
la source
Réponses:
Je déteste être porteur de mauvaises nouvelles, mais WordPress code en dur la fonctionnalité de modèle de page au type de publication "page" , au moins dans la version 3.0 (qui pourrait changer dans les futures versions mais il n'y a pas d'initiative spécifique à ma connaissance pour la changer) C'est donc l'une des très rares fois où j'ai du mal à trouver comment contourner quelque chose sans pirater le cœur.)
La solution que j'ai trouvée consiste à copier le code pertinent à partir du noyau WordPress et à le modifier selon nos besoins. Voici les étapes (les numéros de ligne proviennent de la v3.0.1):
Copiez la
page_attributes_meta_box()
fonction de la ligne 535 de/wp-admin/includes/meta-boxes.php
et modifiez-la en conséquence.add_meta_boxes
Codez un hook pour ajouter la métabox créée en # 1.Copiez la
get_page_templates()
fonction de la ligne 166 de/wp-admin/includes/theme.php
et modifiez-la en conséquence.Copiez la
page_template_dropdown()
fonction de la ligne 2550/wp-admin/includes/template.php
et modifiez-la en fonction.Ajoutez un modèle de publication à votre thème.
Codez un
save_post
crochet pour activer le stockage du nom de fichier du modèle de publication lors de l'enregistrement.Codez un
single_template
crochet pour permettre le chargement du modèle de publication pour les publications associées.Maintenant avec!
1. Copiez la
page_attributes_meta_box()
fonctionComme première étape, vous devez copier la
page_attributes_meta_box()
fonction de la ligne 535 de/wp-admin/includes/meta-boxes.php
et j'ai choisi de la renommerpost_template_meta_box()
. Puisque vous n'avez demandé que des modèles de page, j'ai omis le code pour spécifier un article parent et pour spécifier l'ordre qui rend le code beaucoup plus simple. J'ai également choisi d'utiliser postmeta pour cela plutôt que d'essayer de réutiliser lapage_template
propriété de l' objet afin d'éviter les incompatibilités potentielles causées par un couplage involontaire. Voici donc le code:2. Codez un
add_meta_boxes
crochetL'étape suivante consiste à ajouter la métabox à l'aide du
add_meta_boxes
crochet:3. Copiez la
get_page_templates()
fonctionJ'ai supposé qu'il serait logique de faire la différence entre les modèles de page et le modèle de publication, d'où la nécessité d'une
get_post_templates()
fonction basée sur laget_page_templates()
ligne 166 de/wp-admin/includes/theme.php
. Mais au lieu d'utiliser leTemplate Name:
marqueur, les modèles de page qui utilisent cette fonction utilisent unPost Template:
marqueur à la place que vous pouvez voir ci-dessous.J'ai également filtré l'inspection de
functions.php
(get_page_templates()
je ne sais pas comment cela a jamais fonctionné correctement sans cela, mais peu importe!) Et la seule chose qui reste est de changer les références au mot pourpage
assurer lapost
lisibilité de la maintenance sur la route:4. Copiez la
page_template_dropdown()
fonctionDe même, copiez à
page_template_dropdown()
partir de la ligne 2550 de/wp-admin/includes/template.php
pour créerpost_template_dropdown()
et changez-le simplement pour appeler à laget_post_templates()
place:5. Ajoutez un modèle de publication
L'étape suivante consiste à ajouter un modèle de publication pour les tests. À l'aide du
Post Template:
marqueur mentionné à l'étape 3, copiez àsingle.php
partir de votre thème danssingle-test.php
et ajoutez l'en-tête de commentaire suivant ( assurez-vous de modifier quelque chosesingle-test.php
pour pouvoir dire qu'il se charge au lieu desingle.php
) :Une fois que vous avez effectué les étapes # 1 à # 5, vous pouvez voir votre métabox "Post Templates" apparaître sur la page de votre éditeur de publication:
(source: mikeschinkel.com )
6. Codez un
save_post
crochetMaintenant que l'éditeur est au carré, vous devez réellement enregistrer le nom de votre fichier de modèle de page dans postmeta lorsque l'utilisateur clique sur "Publier". Voici le code pour cela:
7. Coder un
single_template
crochetEt enfin, vous devez réellement obtenir WordPress pour utiliser vos nouveaux modèles de publication. Pour ce faire, vous accrochez
single_template
et renvoyez le nom de modèle souhaité pour les publications qui en ont un affecté:Et c'est tout!
REMARQUE que je n'ai pas pris en compte uniquement les types de publication personnalisés
post_type=='post'
. À mon avis, pour aborder les types de messages personnalisés, il faudrait faire la différence entre les différents types de messages et, bien que ce ne soit pas trop difficile, je n'ai pas tenté cela ici.la source
Wordpress vous permet d'ajouter des méta aux catégories à l'aide d'un plugin:
Pour ce faire, vous devez ajouter l'une des différentes extensions qui ajoutent des méta aux catégories (imitant les pages qui sortent de la boîte), Simple Term Meta fait bien le travail.
NB WordPress 3.x est nécessaire pour étendre les catégories.
Après cela, vous pouvez utiliser:
Utilisez Functions.php pour ajouter des méthodes pour faire ce que vous voulez, par exemple
Appeler de nouveaux champs dans des thèmes est facile:
Plus de détails et d'exemples: http://www.wphub.com/adding-metadata-taxonomy-terms/
la source