Como adicionar uma postagem de um tipo de postagem personalizada como a página estática?

4

Eu criei um tipo de postagem personalizado e adicionei alguns metaboxes personalizados à tela de edição da página. Meu objetivo era fornecer metaboxes específicos que um usuário pode editar, o que, por sua vez, permitiria que um usuário modificasse áreas de conteúdo específicas da página inicial de um site.

Tudo descrito acima funciona perfeitamente, mas parece que não consigo definir a página criada a partir desse tipo de postagem personalizada como a "página estática" na área "configurações" do admin do wordpress.

Parece que a lista suspensa, que permite selecionar uma página estática, mostra apenas as páginas localizadas na palavra-chave padrão "page" post_type.

Como eu poderia alterar essas configurações para atingir minha meta?

    
por NetConstructor.com 11.11.2010 / 13:23

4 respostas

1

A menos que uma solução possa ser fornecida sobre este tópico, presumo que, por enquanto, a melhor maneira de fazer isso funcionar é simplesmente criar um arquivo "home.php" dentro do modelo e consultar o ID do post diretamente. / p>

Eu aceitei isso como a resposta por enquanto, mas se alguém encontrar uma solução depois que essa resposta for aceita, poste-a e aceitarei isso como a resposta correta.

    
por NetConstructor.com 24.11.2010 / 17:58
3

Adicione um filtro para 'wp_dropdown_pages' . Se 'name' => 'page_on_front' , preencha a lista com seus tipos de postagem personalizados.

Aqui está um exemplo muito primitivo como plugin. Eu peguei o tipo de postagem personalizado do 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 );
}

Ative, escreva uma página book , vá para Configurações de leitura e escolha essa página como página inicial.

Pressione Salvar alterações . Sorria.

    
por fuxia 11.11.2010 / 14:12
1

Funciona - mas da próxima vez que eu for às configurações de leitura, a caixa de seleção Front Page - exibe apenas a entrada "- Select -", não a página do tipo personalizado que eu selecionei antes.

    
por chris 23.11.2010 / 22:25
0

A solução funciona, mas tive o mesmo problema que o OP. Na página de leitura, o select retorna para -selecionar, e na página inicial do site, o URL mostra o caminho completo do URL (http://mysite.com/book/this-is-a-book-test)

Eu acho que os problemas podem ser devido à função que precisa de todos os três ... show_on_front page_on_front page_for_posts

    
por christopher 24.11.2010 / 16:25