( Nota de los moderadores: el título era originalmente "¿Cómo puedo agregar el selector" Atributos de página "y / o" Atributos de página> Plantilla "al editor POSTS)?
Actualmente, WP solo permite la asignación de una "plantilla" a las páginas (es decir post_type=='page'
). También me gustaría extender esta funcionalidad a las publicaciones (es decir post_type=='post'
).
¿Cómo puedo agregar el metacuadro "Atributos de página" y, más específicamente, el selector de plantillas al editor de publicaciones?
Supongo que este es el código que colocaré en mi functions.php
para mi tema.
ACTUALIZACIÓN: He logrado agregar el menú desplegable de plantillas codificadas a mi editor de publicaciones, simplemente agregando el cuadro de selección html a mi cuadro de opciones meta personalizadas existente. Aquí está el código que estoy usando para eso ...
add_meta_box('categorydiv2', __('Post Options'), 'post_categories_meta_box_modified', 'post', 'side', 'high');
Y aquí está la función que escribe las opciones y el cuadro de selección de plantilla ...
//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
}
Y finalmente, el código para capturar los valores seleccionados al guardar ...
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;
}
Ahora, creo que todo lo que queda es (1) capturar la plantilla seleccionada y agregarla al meta de publicación para esta publicación y (2) modificar index.php y single.php para que use la plantilla elegida.
fuente
Respuestas:
Odio ser el portador de malas noticias, pero WordPress codifica la funcionalidad de la plantilla de página para el tipo de publicación de "página" , al menos en v3.0 (eso podría cambiar en futuras versiones, pero no hay una iniciativa específica que conozca para cambiarlo) todavía. Así que esta es una de las pocas veces que estoy luchando para encontrar la manera de sortear algo sin hackear el núcleo).
La solución que se me ocurrió es básicamente copiar el código relevante del núcleo de WordPress y modificarlo según nuestras necesidades. Estos son los pasos (los números de línea son de v3.0.1):
Copie la
page_attributes_meta_box()
función de la línea 535 de/wp-admin/includes/meta-boxes.php
y modifíquela según convenga.Codifique un
add_meta_boxes
gancho para agregar el metabox creado en el n. ° 1.Copie la
get_page_templates()
función de la línea 166/wp-admin/includes/theme.php
y modifíquela para adaptarla.Copie la
page_template_dropdown()
función de la línea 2550/wp-admin/includes/template.php
y modifíquela según convenga.Agregue una plantilla de publicación a su tema.
Codifique un
save_post
gancho para permitir el almacenamiento del nombre del archivo de plantilla de publicación al guardar.Codifique un
single_template
gancho para permitir la carga de la plantilla de publicación para las publicaciones asociadas.Ahora con eso!
1. Copie la
page_attributes_meta_box()
funciónComo primer paso, debe copiar la
page_attributes_meta_box()
función de la línea 535/wp-admin/includes/meta-boxes.php
y he elegido cambiarle el nombrepost_template_meta_box()
. Como solo solicitó plantillas de página, omití el código para especificar una publicación principal y para especificar el orden que hace que el código sea mucho más simple. También elegí usar postmeta para esto en lugar de intentar reutilizar lapage_template
propiedad del objeto para evitar posibles incompatibilidades causadas por un acoplamiento involuntario. Así que aquí está el código:2. Codifique un
add_meta_boxes
ganchoEl siguiente paso es agregar el metabox usando el
add_meta_boxes
gancho:3. Copie la
get_page_templates()
funciónSupuse que solo tendría sentido diferenciar entre las plantillas de página y la plantilla de publicación, por lo tanto, la necesidad de una
get_post_templates()
función basada en laget_page_templates()
línea 166 de/wp-admin/includes/theme.php
. Pero en lugar de usar elTemplate Name:
marcador, qué plantillas de página usan esta función, usa unPost Template:
marcador que puede ver a continuación.También me filtrada a cabo la inspección de
functions.php
(no sé cómoget_page_templates()
nunca ha funcionado correctamente sin eso, pero lo que sea!) Y lo único que queda es cambiar las referencias a la palabrapage
quepost
para facilitar la lectura de mantenimiento en el futuro:4. Copie la
page_template_dropdown()
funciónDel mismo modo, copie
page_template_dropdown()
desde la línea 2550 de/wp-admin/includes/template.php
para crearpost_template_dropdown()
y simplemente cámbielo para llamar en suget_post_templates()
lugar:5. Agregar una plantilla de publicación
El siguiente paso es agregar una plantilla de publicación para probar. Usando el
Post Template:
marcador mencionado en el paso 3 copiasingle.php
de tu temasingle-test.php
y agrega el siguiente encabezado de comentario ( asegúrate de modificar algosingle-test.php
para que puedas decir que se está cargando en lugar desingle.php
) :Una vez que haya realizado los pasos 1 al 5, puede ver su metabox "Publicar plantillas" en su página de editor de publicaciones:
(fuente: mikeschinkel.com )
6. Codifique un
save_post
ganchoAhora que tiene el editor ajustado, debe guardar el nombre del archivo de plantilla de página en postmeta cuando el usuario hace clic en "Publicar". Aquí está el código para eso:
7. Codifique un
single_template
ganchoY, por último, debe obtener WordPress para usar sus nuevas plantillas de publicación. Para ello, engancha
single_template
y devuelve el nombre de la plantilla deseada para las publicaciones a las que se les ha asignado una:¡Y eso es todo!
TEN EN CUENTA que no tomé en cuenta solo los tipos de publicaciones personalizadas
post_type=='post'
. En mi opinión, abordar los tipos de publicaciones personalizadas requeriría diferenciar entre los diferentes tipos de publicaciones y, aunque no es demasiado difícil, no lo intenté aquí.fuente
Wordpress le permite agregar Meta a las Categorías usando un complemento:
Para hacer esto, debe agregar una de las diversas extensiones que agrega meta a las categorías (imitando qué páginas salen de la caja), Simple Term Meta hace el trabajo muy bien.
NB WordPress 3.x es necesario para ampliar las categorías.
Después de eso puedes usar:
Use Functions.php para agregar métodos para hacer lo que quiera, por ejemplo
Llamar a nuevos campos en los temas es fácil:
Más detalles y ejemplos: http://www.wphub.com/adding-metadata-taxonomy-terms/
fuente