Wordpress : Custom Post Type
Crear Custom Post Type usando GenerateWp.com
Entramos a la siguiente url GenerateWp.com y Escoger la opción Post Type Generator.
GenerateWp.com --> Son Herramientas encantadoras para desarrolladores de WordPress , La forma más fácil y rápida de crear código personalizado y de alta calidad para su proyecto de WordPress utilizando los últimos estándares de codificación y API de WordPress.
Crear Custom Post Type en forma Manual
Para crear un tipo de publicación personalizada para cualquier tema en particular en WordPress, vaya al archivo function.php desde el directorio de temas de WordPress y luego agregue el siguiente código.
/* Custom Post Type Start */
function create_posttype() {
register_post_type( 'Noticias',
// CPT Options
array(
'labels' => array(
'name' => __( 'Noticias' ),
'singular_name' => __( 'Noticias' )
),
'public' => true,
'has_archive' => false,
'rewrite' => array('slug' => 'Noticias'),
)
);
}
// Hooking up our function to theme setup
add_action( 'init', 'create_posttype' );
/* Custom Post Type End */
→ Mas sobre la función register_post_type , esta funcion se encarga de activar los Custom Post Type.
Después de agregar este código, el tipo de publicación de Noticias aparecerá automáticamente en el Área de administración de su WordPress. Para ver cómo aparecerá en la parte frontal de su panel de WordPress, consulte la imagen a continuación.
Recuerda:
Deves crear el archivo single-nombredelposttype.php en la carpeta root/wp-content/themes/tu-tema-activo
por ejemplo si hemos creado el Post Type Noticias debemos crear el archivo single-noticias.php
a) En algunos ejemplos dentro del archivo single-nombredelposttype.php encontramos el codigo:
<?php
get_header();
?>
b) La función get_header(); lo encontramos en la plantilla root/wp-includes/general-template.php
function get_header( $name = null ) {
/**
* Fires before the header template file is loaded.
* @since 2.1.0
* @since 2.8.0 $name parameter added.
* @param string|null $name Name of the specific header file to use. null for the default header.
*/
do_action( 'get_header', $name );
$templates = array();
$name = (string) $name;
if ( '' !== $name ) {
$templates[] = "header-{$name}.php";
}
$templates[] = 'header.php';
locate_template( $templates, true );
}
c) El archivo general-template.php llama al archivo header.php que se encuentra en la carpeta root\wp-content\themes\tu-tema-activo
d) En el archivo header.php se carga los menus,el logo,etc , ademas carga:
if ( is_singular( ) ) :
$single_page_style = get_post_meta( get_the_ID(), CHEFSCUISINE_RECIPE_PREFIX . 'page_style', true );
$single_page_style = empty( $single_page_style ) ? 'style-1' : $single_page_style;
echo Chefscuisine_Template_Loader::load( 'header/' . $single_page_style );
// Aqui entra y carga header/' . $single_page_style = style-1
else:
$single_page_style = '';
echo Chefscuisine_Template_Loader::load( 'header/style-1' );
endif;
e) El archivo header.php llama a style-1.php que se encuentra en la carpeta root\wp-content\themes\tu-tema-activo\templates\header
Dentro del archivo style-1.php se carga el titulo del post type
<div id="header" class="heading" style="background-image: url(<?php echo esc_url( $header_background_image ); ?>);">
<div class="container">
<div class="row">
<div class="col-md-10 col-md-offset-1 col-sm-12">
<div class="page-title">
<?php the_chefscuisine_title('<h2>', '</h2>'); ?>
</div>
<?php if ( chefscuisine_check_chefscuisine_plugin( ) ) : ?>
<?php echo Chefscuisine_Template_Loader::load( 'misc/breadcrumb' ); ?>
<?php else: ?>
<?php chefscuisine_get_breadcrumb(); ?>
<?php endif; ?>
</div>
</div>
</div>
</div>
Creando Custom Post type carrusel
https://www.youtube.com/watch?v=5qpwIw20B18&list=PLaNBgK4b74m5rKUfdFNPLc43ZuxZeQlC5&index=7
→ Para Crear un custom post type tipo carrusel primero lo registramos en el archivo functions.php
<?php
/* Custom Post Types & Shortcodes #4 - Diseño y programación Web
https://www.youtube.com/watch?v=5qpwIw20B18&list=PLaNBgK4b74m5rKUfdFNPLc43ZuxZeQlC5&index=7
Rafel Sansó
* Define custom post type
* Register post types: https://codex.wordpress.org/Function_Reference/register_post_type
* Icons: https://developer.wordpress.org/resource/dashicons/
*/
function fastfood_post_type() {
register_post_type( 'fastfood_slider',
array(
'labels' => array(
'name' => __( 'Carousel' ),
'singular_name' => __( 'Item' ),
'add_new' => __( 'Nuevo item' ),
'add_new_item' => __( 'Añadir nuevo item' ),
'edit_item' => __( 'Editar item' ),
'featured_image' => __( 'Imagen del slide' )
),
'public' => true,
'exclude_from_search' => true,
'has_archive' => false,
'show_in_nav_menus' => false,
'menu_icon' => 'dashicons-slides',
//'rewrite' => array('slug' => 'carousel'),
'supports' => array('title', 'editor', 'thumbnail')
)
);
}
add_action( 'init', 'fastfood_post_type' );
/*
__( despues de estos caracteres significa que son caracteres que se pueden traducir
menu_icon --- con que icono se distinguira el post (https://developer.wordpress.org/resource/dashicons/)
*/
→ Una vez registrado en el archivo functions.php aparecera en nuestro escritorio de wordpress con el nombre carousel.
→ Luego para invocar el custom post type tipo carrusel ingresamos el siguiente codigo en el archivo index.php o front-page.php o page.php segun la jerarquia de archivos:
Recuerda si deseas saber que pagina se esta mostrando al visualizar tu web ver el tutorial mostrar el nombre del archivo de la plantilla actual
<!-- -------- Inicio Slider ----------- -->
<!-- Custom Post Types & Shortcodes #4 - Diseño y programación Web
https://www.youtube.com/watch?v=5qpwIw20B18&list=PLaNBgK4b74m5rKUfdFNPLc43ZuxZeQlC5&index=7
Rafel Sansó
-->
<?php
$args = array(
'post_type' => 'fastfood_slider',
'posts_per_page' => 3
);
/* Consulta a la base de datos con WP_Query y le pasamos el argumento $args que indica 3 ultimos registros
recuerda que el custom post tyoe lo hems definido en function.php conla funcion
register_post_type( 'fastfood_slider' */
$loop = new WP_Query($args);
if ($loop->have_posts()) : ?>
<div id="fastfood-slider-home" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<?php
/* $l = variable para almacenar cunatos registros tiene el $loop mediante funcion post_count */
$l = $loop->post_count;
for ($i = 0; $i < $l; $i++) { ?>
<li data-target="#fastfood-slider-home" data-slide-to="<?php echo $i; ?>" <?php if ($i == 0) { ?> class="active" <?php } ?>>
</li>
<?php
}
?>
</ol>
<div class="carousel-inner" role="listbox">
<?php
$n = 0;
/* mientras $loop tenga post have_posts() , convertimos a $loop en un post (the_post()) */
while ($loop->have_posts()) : $loop->the_post(); ?>
<div class="carousel-item <?php if ($n == 0) {
echo 'active';
} ?>">
<!-- get_the_post_thumbnail = obtiene la imagen destacada
le pasamos como parametro el id del post $loop->ID y el tamaño en este caso un tamaño personalizado que se a
creado en el arhivo functions.php-->
<?php echo get_the_post_thumbnail($loop->ID, 'fastfood-featured-image'); ?>
<div class="carousel-caption">
<?php the_content(); ?>
</div>
</div>
<?php
$n++;
endwhile;
?>
</div>
</div>
<?php
endif;
?>
<!-- -------- Fin Slider ----------- -->
Crear Custom Post Type con Plugin
Página principal del plugin https://github.com/WebDevStudios/custom-post-type-ui/
Se instala en el DashBoard --> CPT UI
Referencia:
Usando Custom Post Types en WordPress