Skip to content

Instantly share code, notes, and snippets.

@FranciscoAMK
Created October 15, 2015 16:17
Show Gist options
  • Save FranciscoAMK/57d2b912c9af3ac4e000 to your computer and use it in GitHub Desktop.
Save FranciscoAMK/57d2b912c9af3ac4e000 to your computer and use it in GitHub Desktop.
Respuesta a la pregunta de un estudiante
<?php
/*
*
* Crear metabox
*
* Defino el metabox en el que irán los campos personalizados
*
* @author Jonathan Martinez
* @package Bluu
*
* @since 1.0.0
*
*/
function bluu_home_metabox_add(){
/**
* MENSAJE DE FRANCISCO:
* Se unieron todos los boxes en una sola función
*
*/
add_meta_box('home-details', __('Sección 1', 'bluu'), 'bluu_home_metabox', 'page', 'normal', 'high', '');
add_meta_box('home_2-details', __('Sección 2', 'bluu'), 'bluu_home_2_metabox', 'page', 'normal', 'high', '');
add_meta_box('home_3-details', __('Sección 3', 'bluu'), 'bluu_home_3_metabox', 'page', 'normal', 'high', '');
add_meta_box('home_4-details', __('Sección 4', 'bluu'), 'bluu_home_4_metabox', 'page', 'normal', 'high', '');
}
add_action('add_meta_boxes', 'bluu_home_metabox_add');
/*
*
* Crear campos del metabox
*
* Creamos lso diferentes campso que aparecerán en el metabox
*
* @author Jonathan Martinez
* @package Bluu
*
* @since 1.0.0
*
*/
//Campos 1
$custom_home_meta_fields = array(
array(
'label' => __('Titulo', 'bluu'),
'desc' => __('Inserta el título de la sección 1', 'bluu'),
'id' => 'titulo',
'type' => 'text'
),
array(
'label' => __('Subtitulo', 'bluu'),
'desc' => __('Inserta el subtítulo de la sección 1', 'bluu'),
'id' => 'subtitulo',
'type' => 'text'
),
array(
'label' => __('Texto', 'bluu'),
'desc' => __('Inserta el texto de la sección 1', 'bluu'),
'id' => 'texto',
'type' => 'textarea'
),
array(
'label' => __('Texto del botón', 'bluu'),
'desc' => __('Inserta el texto del botón de la sección 1', 'bluu'),
'id' => 'boton',
'type' => 'text'
),
array(
'label' => __('Link del botón', 'bluu'),
'desc' => __('Inserta el link del botón de la sección 1', 'bluu'),
'id' => 'link',
'type' => 'text'
),
);
//Campos 2
$custom_home_2_meta_fields = array(
array(
'label' => __('Titulo', 'bluu'),
'desc' => __('Inserta el título de la sección 2', 'bluu'),
'id' => 'titulo2',
'type' => 'text'
),
array(
'label' => __('Subtitulo', 'bluu'),
'desc' => __('Inserta el subtítulo de la sección 2', 'bluu'),
'id' => 'subtitulo2',
'type' => 'text'
),
array(
'label' => __('Texto', 'bluu'),
'desc' => __('Inserta el texto de la sección 2', 'bluu'),
'id' => 'texto2',
'type' => 'textarea'
),
array(
'label' => __('Texto del botón', 'bluu'),
'desc' => __('Inserta el texto del botón de la sección 2', 'bluu'),
'id' => 'boton2',
'type' => 'text'
),
array(
'label' => __('Link del botón', 'bluu'),
'desc' => __('Inserta el link del botón de la sección 2', 'bluu'),
'id' => 'link2',
'type' => 'text'
),
);
//Campos 3
$custom_home_3_meta_fields = array(
array(
'label' => __('Titulo', 'bluu'),
'desc' => __('Inserta el título de la sección 3', 'bluu'),
'id' => 'titulo3',
'type' => 'text'
),
array(
'label' => __('Subtitulo', 'bluu'),
'desc' => __('Inserta el subtítulo de la sección 3', 'bluu'),
'id' => 'subtitulo3',
'type' => 'text'
),
array(
'label' => __('Texto', 'bluu'),
'desc' => __('Inserta el texto de la sección 3', 'bluu'),
'id' => 'texto3',
'type' => 'textarea'
),
);
//Campos 4
$custom_home_4_meta_fields = array(
array(
'label' => __('Titulo', 'bluu'),
'desc' => __('Inserta el título de la sección 4', 'bluu'),
'id' => 'titulo4',
'type' => 'text'
),
array(
'label' => __('Subtitulo', 'bluu'),
'desc' => __('Inserta el subtítulo de la sección 4', 'bluu'),
'id' => 'subtitulo4',
'type' => 'text'
),
array(
'label' => __('Texto', 'bluu'),
'desc' => __('Inserta el texto de la sección 4', 'bluu'),
'id' => 'texto4',
'type' => 'textarea'
),
array(
'label' => __('Texto del botón', 'bluu'),
'desc' => __('Inserta el texto del botón de la sección 4', 'bluu'),
'id' => 'boton4',
'type' => 'text'
),
array(
'label' => __('Link del botón', 'bluu'),
'desc' => __('Inserta el link del botón de la sección 4', 'bluu'),
'id' => 'link4',
'type' => 'text'
),
);
/**
* CONSTRUIR LOS METABOXES
*
*/
//Box 1
function bluu_home_metabox(){
global $custom_home_meta_fields, $post;
//Crear campo nonce
wp_nonce_field('bluu_home_meta_box_nonce', 'meta_box_nonce');
//Loop por los campos
foreach ( $custom_home_meta_fields as $field) {
//Obtener el valor del campo
$meta = get_post_meta($post->ID, $field['id'], true);
//Hacemso un switch dependiendo del contenido
switch ($field['type']){
case 'text': { ?>
<p>
<label for="<?php echo $field['id']; ?>"><?php echo $field['label']; ?></label><br>
<input type="text" id="<?php echo $field['id']; ?>" name="<?php echo $field['id']; ?>" class="widefat" value="<?php echo $meta; ?>">
<span class="howto"><?php echo $field['desc']; ?></span>
</p>
<hr style="width: 100%; height:1px; border:none; border-bottom: 1px solid white; margin: 15px 0px; background: #dbdbdb">
<?php }
break;
case 'textarea': { ?>
<p>
<label for="<?php echo $field['id']; ?>"><?php echo $field['label']; ?></label><br>
<textarea name="<?php echo $field['id']; ?>" id="<?php echo $field['id']; ?>" rows="8" class="widefat"><?php echo $meta ?></textarea>
<span class="howto"><?php echo $field['desc']; ?></span>
</p>
<hr style="width: 100%; height:1px; border:none; border-bottom: 1px solid white; margin: 15px 0px; background: #dbdbdb">
<?php }
break;
}
}
}
//Box 2
function bluu_home_2_metabox(){
global $custom_home_2_meta_fields, $post;
//Crear campo nonce
wp_nonce_field('bluu_home_2_meta_box_nonce', 'meta_box_nonce');
//Loop por los campos
foreach ( $custom_home_2_meta_fields as $field) {
//Obtener el valor del campo
$meta = get_post_meta($post->ID, $field['id'], true);
//Hacemso un switch dependiendo del contenido
switch ($field['type']){
case 'text': { ?>
<p>
<label for="<?php echo $field['id']; ?>"><?php echo $field['label']; ?></label><br>
<input type="text" id="<?php echo $field['id']; ?>" name="<?php echo $field['id']; ?>" class="widefat" value="<?php echo $meta; ?>">
<span class="howto"><?php echo $field['desc']; ?></span>
</p>
<hr style="width: 100%; height:1px; border:none; border-bottom: 1px solid white; margin: 15px 0px; background: #dbdbdb">
<?php }
break;
case 'textarea': { ?>
<p>
<label for="<?php echo $field['id']; ?>"><?php echo $field['label']; ?></label><br>
<textarea name="<?php echo $field['id']; ?>" id="<?php echo $field['id']; ?>" rows="8" class="widefat"><?php echo $meta ?></textarea>
<span class="howto"><?php echo $field['desc']; ?></span>
</p>
<hr style="width: 100%; height:1px; border:none; border-bottom: 1px solid white; margin: 15px 0px; background: #dbdbdb">
<?php }
break;
}
}
}
//Box 3
function bluu_home_3_metabox(){
global $custom_home_3_meta_fields, $post;
//Crear campo nonce
wp_nonce_field('bluu_home_3_meta_box_nonce', 'meta_box_nonce');
//Loop por los campos
foreach ( $custom_home_3_meta_fields as $field) {
//Obtener el valor del campo
$meta = get_post_meta($post->ID, $field['id'], true);
//Hacemso un switch dependiendo del contenido
switch ($field['type']){
case 'text': { ?>
<p>
<label for="<?php echo $field['id']; ?>"><?php echo $field['label']; ?></label><br>
<input type="text" id="<?php echo $field['id']; ?>" name="<?php echo $field['id']; ?>" class="widefat" value="<?php echo $meta; ?>">
<span class="howto"><?php echo $field['desc']; ?></span>
</p>
<hr style="width: 100%; height:1px; border:none; border-bottom: 1px solid white; margin: 15px 0px; background: #dbdbdb">
<?php }
break;
case 'textarea': { ?>
<p>
<label for="<?php echo $field['id']; ?>"><?php echo $field['label']; ?></label><br>
<textarea name="<?php echo $field['id']; ?>" id="<?php echo $field['id']; ?>" rows="8" class="widefat"><?php echo $meta ?></textarea>
<span class="howto"><?php echo $field['desc']; ?></span>
</p>
<hr style="width: 100%; height:1px; border:none; border-bottom: 1px solid white; margin: 15px 0px; background: #dbdbdb">
<?php }
break;
}
}
}
//Box 4
function bluu_home_4_metabox(){
global $custom_home_4_meta_fields, $post;
//Crear campo nonce
wp_nonce_field('bluu_home_4_meta_box_nonce', 'meta_box_nonce');
//Loop por los campos
foreach ( $custom_home_4_meta_fields as $field) {
//Obtener el valor del campo
$meta = get_post_meta($post->ID, $field['id'], true);
//Hacemso un switch dependiendo del contenido
switch ($field['type']){
case 'text': { ?>
<p>
<label for="<?php echo $field['id']; ?>"><?php echo $field['label']; ?></label><br>
<input type="text" id="<?php echo $field['id']; ?>" name="<?php echo $field['id']; ?>" class="widefat" value="<?php echo $meta; ?>">
<span class="howto"><?php echo $field['desc']; ?></span>
</p>
<hr style="width: 100%; height:1px; border:none; border-bottom: 1px solid white; margin: 15px 0px; background: #dbdbdb">
<?php }
break;
case 'textarea': { ?>
<p>
<label for="<?php echo $field['id']; ?>"><?php echo $field['label']; ?></label><br>
<textarea name="<?php echo $field['id']; ?>" id="<?php echo $field['id']; ?>" rows="8" class="widefat"><?php echo $meta ?></textarea>
<span class="howto"><?php echo $field['desc']; ?></span>
</p>
<hr style="width: 100%; height:1px; border:none; border-bottom: 1px solid white; margin: 15px 0px; background: #dbdbdb">
<?php }
break;
}
}
}
/**
* Guardamos los campos
*
*/
function bluu_save_home_custom_meta( $post_id ){
global $custom_home_meta_fields, $custom_home_2_meta_fields, $custom_home_2_meta_fields, $custom_home_3_meta_fields, $custom_home_4_meta_fields, $post;
/**
* MENSAJE DE FRANCISCO:
* Se unieron todos los arrays en uno solo, de tal
* forma que solo intervenimos una vez en la función que guarda los campos
*
*/
$fields_todos = array_merge($custom_home_meta_fields, $custom_home_2_meta_fields, $custom_home_3_meta_fields, $custom_home_4_meta_fields);
//verificar que el nonce se ha enviado
if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'bluu_home_4_meta_box_nonce' ) ){
return ;
}
//verificar que esto no es un autoguardado
if( defined('DOING_AUTOSAVE') && DOING_AUTOSAFE ){
return ;
}
//verificar permisos de usuario para guardar
if('page' == $_POST['post_type']){
if( !current_user_can( 'edit_page', $post_id ) ){
return ;
} elseif ( !current_user_can( 'edit_post', $post_id ) ){
return ;
}
}
//loop por los campos
foreach ($fields_todos as $field ) {
//capturamos datos antiguos
$old = get_post_meta($post_id, $field['id'], true);
//capturamos datos nuevos
$new = $_POST[ $field['id'] ];
if ( $new && $new != $old ) {
//actualizar el post meta
update_post_meta( $post_id, $field['id'], $new );
} elseif ( '' == $new && $old ) {
//borrar el post meta
delete_post_meta( $post_id, $field['id'], $old );
}
}//foreach
}
add_action( 'save_post', 'bluu_save_home_custom_meta' );
/**
* Boxes CSS
*
* MENSAJE DE FRANCISCO:
* Se unieron todas las llamadas de jquery y CSS en una sola función
*
*/
function bluu_home_4_metabox_css( ){
?>
<style>
#home-details,
#home_2-details,
#home_3-details,
#home_4-details{display: none;}
</style>
<script>
jQuery('document').ready(function($){
slider_box = function(){
/**
* MENSAJE DE FRANCISCO:
* Te recomiendo usar un archivo diferente a index.php
* usa por ejemplo template-home.php ya que por la jerarquía de WP
* usar index.php puede generar algunos conflictos
*
*/
//if ( $('#page_template').attr('value') == 'template-inicio.php' ) {
if ( $('#page_template').attr('value') == 'index.php' ) {
$('#home-details, #home_2-details, #home_3-details, #home_4-details').slideDown();
} else{
$('#home-details, #home_2-details, #home_3-details, #home_4-details').hide();
}
}
slider_box();
$('#page_template').change(function(){
slider_box();
});
});
</script>
<?php
}
add_action('admin_head', 'bluu_home_4_metabox_css' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment