¿Cómo agregar una publicación de un tipo de publicación personalizada como la página estática?

4

He creado un tipo de publicación personalizada y he agregado algunos metaboxes personalizados a la pantalla de edición de la página. Mi objetivo era proporcionar metaboxes específicos que un usuario pueda editar, lo que a su vez permitiría a un usuario modificar áreas de contenido específicas de la página principal de un sitio web.

Todo lo descrito anteriormente funciona perfectamente, excepto que parece que no puedo configurar la página creada a partir de este tipo de publicación personalizada como la "página estática" dentro del área de "configuración" de "administrador de wordpress".

Parece que el menú desplegable que le permite seleccionar una página estática solo muestra las páginas ubicadas dentro de la "página" predeterminada "page" post_type

¿Cómo podría cambiar esta configuración para lograr mi objetivo?

    
pregunta NetConstructor.com 11.11.2010 - 13:23

4 respuestas

1

A menos que se pueda proporcionar una solución sobre este tema, asumiré por ahora que la mejor manera de hacer que esto funcione es simplemente crear un archivo "home.php" dentro de la plantilla y consultar la ID de la publicación directamente. / p>

He aceptado esto como la respuesta por el momento, pero si alguien encuentra una solución después de que esta sea aceptada, por favor, publíquela y la aceptaré como la respuesta correcta.

    
respondido por el NetConstructor.com 24.11.2010 - 17:58
3

Agrega un filtro para 'wp_dropdown_pages' . Si 'name' => 'page_on_front' , complete la lista con sus tipos de publicaciones personalizadas.

Aquí hay un ejemplo muy primitivo como complemento. Tomé el tipo de publicación personalizada del códice .

<?php
/*
Plugin Name: Custom Post Type as Front Page
Description: Adds your custom post type to the list of available front pages.
Version:     0.1
Author:      Thomas Scholz
Author URI:  http://toscho.de
License:     GPL v2
*/

add_action('init', 'my_custom_init');
function my_custom_init()
{
    $labels = array(
    'name' => _x('Books', 'post type general name'),
    'singular_name' => _x('Book', 'post type singular name'),
    'add_new' => _x('Add New', 'book'),
    'add_new_item' => __('Add New Book'),
    'edit_item' => __('Edit Book'),
    'new_item' => __('New Book'),
    'view_item' => __('View Book'),
    'search_items' => __('Search Books'),
    'not_found' =>  __('No books found'),
    'not_found_in_trash' => __('No books found in Trash'),
    'parent_item_colon' => ''
    );
    $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => null,
    'supports' => array('title','editor','author','thumbnail','excerpt','comments')
    );
    register_post_type('book',$args);
}

//add filter to insure the text Book, or book, is displayed when user updates a book
add_filter('post_updated_messages', 'book_updated_messages');
function book_updated_messages( $messages ) {
    global $post, $post_ID;

    $messages['book'] = array(
    0 => '', // Unused. Messages start at index 1.
    1 => sprintf( __('Book updated. <a href="%s">View book</a>'), esc_url( get_permalink($post_ID) ) ),
    2 => __('Custom field updated.'),
    3 => __('Custom field deleted.'),
    4 => __('Book updated.'),
    /* translators: %s: date and time of the revision */
    5 => isset($_GET['revision']) ? sprintf( __('Book restored to revision from %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
    6 => sprintf( __('Book published. <a href="%s">View book</a>'), esc_url( get_permalink($post_ID) ) ),
    7 => __('Book saved.'),
    8 => sprintf( __('Book submitted. <a target="_blank" href="%s">Preview book</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
    9 => sprintf( __('Book scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview book</a>'),
    // translators: Publish box date format, see http://php.net/date
    date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
    10 => sprintf( __('Book draft updated. <a target="_blank" href="%s">Preview book</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
    );

    return $messages;
}

// Here we go!
add_filter('wp_dropdown_pages', 'add_book_page_to_dropdown', 10, 1);

function add_book_page_to_dropdown( $select )
{
    // Not our list.
    if ( FALSE === strpos( $select, '<select name="page_on_front"' ) )
    {
        return $select;
    }

    $books = get_posts( array( 'post_type' => 'book' ) );

    if ( ! $books ) // no books found.
    {
        return $select;
    }

    $book_options = walk_page_dropdown_tree($books, 0,
         array(
            'depth' => 0
         ,  'child_of' => 0
         ,  'selected' => 0
         ,  'echo' => 0
         ,  'name' => 'page_on_front'
         ,  'id' => ''
         ,  'show_option_none' => ''
         ,  'show_option_no_change' => ''
         ,  'option_none_value' => ''
        )
    );

    return str_replace( '</select>', $book_options . '</select>', $select );
}

Active, escriba una página de libro , vaya a Configuración de lectura y elija esa página como portada.

Pulsa Guardar cambios . Sonríe.

    
respondido por el fuxia 11.11.2010 - 14:12
1

Funciona, pero la próxima vez que vaya a la configuración de lectura, el cuadro de selección de la página de inicio solo muestra la entrada "- Seleccionar -", no la página de tipo personalizado que seleccioné anteriormente.

    
respondido por el chris 23.11.2010 - 22:25
0

La solución funciona pero me encontré con el mismo problema que el OP. En la página de lectura, el select vuelve a -select-, y en la página de inicio del sitio, la url muestra la ruta completa de la url (http://mysite.com/book/this-is-a-book-test)

Creo que los problemas pueden deberse a la función que necesita los tres ... show_on_front page_on_front page_for_posts

    
respondido por el christopher 24.11.2010 - 16:25

Lea otras preguntas en las etiquetas