web-dev-qa-db-fra.com

Comment ajouter un article à partir d'un type d'article personnalisé en tant que page statique?

J'ai créé un type d'article personnalisé et ajouté des métaboxes personnalisés à l'écran d'édition de page. Mon objectif était de fournir des métaboxes spécifiques pouvant être modifiés par un utilisateur, ce qui lui permettrait de modifier des zones de contenu spécifiques d'une page d'accueil de sites Web.

Tout ce qui est décrit ci-dessus fonctionne parfaitement, sauf qu'il semble impossible de définir la page créée à partir de ce type de message personnalisé comme "page statique" dans la zone "paramètres" de wordpress admin.

Il semble que la liste déroulante qui permet de sélectionner une page statique n’affiche que les pages situées dans la "page" post-type wordpress par défaut.

Comment pourrais-je modifier ces paramètres pour atteindre mon objectif?

4
NetConstructor.com

À moins qu'une solution ne puisse être fournie sur ce sujet, je supposerai pour le moment que la meilleure façon de le faire fonctionner consiste simplement à créer un fichier "home.php" dans un modèle et à interroger directement l'identifiant de l'article.

J'ai accepté ceci comme réponse pour le moment, mais si quelqu'un trouve une solution après l'acceptation de cette réponse, merci de l'afficher et je l'accepterai comme réponse correcte.

1
NetConstructor.com

Ajoutez un filtre pour 'wp_dropdown_pages'. Si 'name' => 'page_on_front', remplissez la liste avec vos types d'article personnalisés.

Voici un exemple très primitif de plugin. J'ai pris le type de message personnalisé du codex .

<?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 );
}

Activez, écrivez une page book , accédez à Paramètres de lecture , puis choisissez cette page comme page d'accueil.

Screenshot

Hit Enregistrer les modifications . Sourire.

3
fuxia

Cela fonctionne - mais la prochaine fois que je vais dans les paramètres de lecture, la zone de sélection Front Page (Page de garde) affiche uniquement l'entrée "- Select -", pas la page de type personnalisé que j'ai sélectionnée auparavant.

1
chris

La solution fonctionne mais j'ai rencontré le même problème que l'OP. Sur la page de lecture, la sélection revient à -select-, et sur la page d'accueil du site, l'URL indique le chemin complet de l'URL (http://mysite.com/book/this-is-a-book-test).

Je pense que les problèmes peuvent être dus à la fonction nécessitant les trois ... show_on_front page_on_front page_for_posts

0
christopher