web-dev-qa-db-fra.com

Créer une page unique pour un type de publication personnalisé

Ok, j'ai installé le plugin Custom Post Type UI et en crée un. J'ai ensuite ajouté un nouveau message. Dans mon thème, j'ai un morceau de code comme ceci:

<?php 
    $loop = new WP_Query( array( 
        'post_type' => 'case studies',   /* edit this line */
        'posts_per_page' => 15 ) );
?>

<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>  

    <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" >
        <?php the_post_thumbnail('thumbnail'); ?>
    </a>

<?php endwhile; ?> 

D'abord, si je clique sur la vignette, le navigateur affiche une erreur indiquant qu'il est dans une boucle de redirection, mais deuxièmement, j'aimerais savoir exactement quels fichiers je dois créer pour afficher un message de ce type. Et quoi mettre dans ce fichier.

6
benhowdle89

Utilisez single-{posttype}.php pour le modèle unique. De même, si vous enregistrez votre type d'article avec l'argument has_archive défini sur true, vous pouvez utiliser archive-{posttype}.php pour votre modèle d'archive, ce qui vous permettra d'ignorer la requête existante, car l'objet global $wp_query sera déjà rempli avec votre type de poste personnalisé.

En passant, vous avez un espace dans votre argument post_type, ce qui posera problème.

Vérifiez la hiérarchie des modèles } et considérez enregistrer vos CPT à l'aide de code dans un plugin plutôt que d'utiliser un plugin d'interface utilisateur CPT.

15
Dave Romsey

Il n’est pas nécessaire que WordPress utilise le modèle de page par défaut. Toutefois, vous pouvez créer un fichier personnalisé single-cpt.php où cpt est le nom de votre type de message enregistré .

<?php

get_header(); ?>

<div id="main-content" class="main-content">

    <div id="primary" class="content-area">
        <div id="content" class="site-content" role="main">
            <?php
                // Start the Loop.
                while ( have_posts() ) : the_post();

                    // Include the page content template.
                    get_template_part( 'content', 'page' );

                endwhile;
            ?>
        </div><!-- #content -->
    </div><!-- #primary -->
</div><!-- #main-content -->

<?php
get_sidebar();
get_footer();
2
Brad Dalton

Vous pouvez simplement écrire ceci dans votre fichier single.php (dans la boucle) et afficher tous les champs dont vous avez besoin dans l'instruction if.

if($post_type == 'case_studies') { // you may need this to be without spaces (machine name)

                echo '<h1>'.get_the_title().' flavors</h1>';

               // post id
             $post_id = get_the_ID();
              get_post_meta($post_id, 'custom_field_name', true);


                <a href="<?php the_permalink() ?>"><?php the_post_thumbnail(); ?></a> 
                  <?php endwhile; ?>

 }

Une autre option est de créer un modèle de page. Copiez votre fichier single.php et renommez-le case_studies.php .. en haut dans les balises php ajoutez:

<?php
/*
Template Name: Brand Output 04/12
*/
?>

puis ajoutez la même instruction if dans la boucle single.php comme dans l'exemple ci-dessus ...

0
Starfs

Message personnalisé Tapez wordpress.Basic en quatre étapes.

<?php

add_action( 'init', 'custom_post_type_func' );
function custom_post_type_func() {
    //posttypename = services
$labels = array(
'name' => _x( 'Services', 'services' ),
'singular_name' => _x( 'services', 'services' ),
'add_new' => _x( 'Add New', 'services' ),
'add_new_item' => _x( 'Add New services', 'services' ),
'edit_item' => _x( 'Edit services', 'services' ),
'new_item' => _x( 'New services', 'services' ),
'view_item' => _x( 'View services', 'services' ),
'search_items' => _x( 'Search services', 'services' ),
'not_found' => _x( 'No services found', 'services' ),
'not_found_in_trash' => _x( 'No services found in Trash', 'services' ),
'parent_item_colon' => _x( 'Parent services:', 'services' ),
'menu_name' => _x( 'Services', 'services' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'description' => 'Hi, this is my custom post type.',
'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'page-attributes' ),
'taxonomies' => array( 'category', 'post_tag', 'page-category' ),
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'has_archive' => true,
'query_var' => true,
'can_export' => true,
'rewrite' => true,
'capability_type' => 'post'
);
register_post_type( 'services', $args );
}
?>

Étape 2: comment afficher le type de message personnalisé dans wordpress dans la page de modèle wordpress?

Vous pouvez afficher n'importe où dans la page de modèle comme ceci:

<?php   $args = array( 'post_type' => 'services', 'posts_per_page' => 20 );
            $loop = new WP_Query( $args );
            while ( $loop->have_posts() ) : $loop->the_post(); ?>
            <div class="services-items">
            <?php the_title(); 
        if ( has_post_thumbnail( $post->ID ) ) {
        echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">';
        echo get_the_post_thumbnail( $post->ID, 'thumbnail' );
        echo '</a>'; }

?>
            </div>
    <?php endwhile; ?>

Etape 3: Créez un nouveau modèle pour afficher un post comme ceci

single- {nom de type d'article personnalisé} .php ou single-services.php

Étape 4: Collez le code dans le fichier single-services.php

 <?php /* The loop */ ?>
            <?php while ( have_posts() ) : the_post(); ?>
                <div class="main-post-div">
                <div class="single-page-post-heading">
                <h1><?php the_title(); ?></h1>
                </div>
                <div class="content-here">
                <?php  the_content();  ?>
                </div>
                <div class="comment-section-here"
                <?php //comments_template(); ?>
                </div>
                </div>

            <?php endwhile; ?>

Ceci est un exemple de type de message personnalisé avec une page de message unique.

0
hitesh nagpal