Created
October 15, 2015 16:17
-
-
Save FranciscoAMK/57d2b912c9af3ac4e000 to your computer and use it in GitHub Desktop.
Respuesta a la pregunta de un estudiante
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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