web-dev-qa-db-fra.com

Obtenir un post par nom de page ou slug

Je sais que c'est très avant-gardiste, mais supporte-moi. J'ai lu que l'on peut interroger une page par le nom de page/post ou le slug. J'essaie de faire cela parce que j'ai besoin des informations d'une page avec un titre/slug similaire et que je n'aurai pas la possibilité d'obtenir l'identifiant de la page (sauf s'il existe un moyen de convertir un titre en identifiant).

J'ai essayé plusieurs variantes sans succès. Cela semble être le moyen le plus raisonnable de gérer cela, mais cela ne fonctionne tout simplement pas.

<?php 
    $args = array(
    'pagename' => 'CM-145',
    'post_type' => 'page',
    'posts_per_page' => 1,
    'numberposts' => 1
); ?>
<div>
    <?php
        query_posts( $args );
        get_template_part( 'loop' );
        wp_reset_query();
    ?>
</div>

La boucle

<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>

                <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                    <?php if ( is_front_page() ) { ?>
                        <h2 class="entry-title"><?php the_title(); ?></h2>
                    <?php } else { ?>
                        <h1 class="entry-title"><?php the_title(); ?></h1>
                    <?php } ?>

                    <div class="entry-content">
                        <?php the_content(); ?>
                        <?php wp_link_pages( array( 'before' => '<div class="page-link">' . __( 'Pages:', 'twentyten' ), 'after' => '</div>' ) ); ?>
                        <?php edit_post_link( __( 'Edit', 'twentyten' ), '<span class="edit-link">', '</span>' ); ?>
                    </div><!-- .entry-content -->
                </div><!-- #post-## -->

                <?php comments_template( '', true ); ?>

<?php endwhile; // end of the loop. ?>

J'ai également essayé 'name' => 'CM-145'. Je ne sais pas si c'est le moyen correct ou raisonnable pour effectuer cette action. En fin de compte, je dois simplement extraire le pouce et l'extrait de la page, donc si vous avez une meilleure idée, n'hésitez pas à me le faire savoir.

Merci d'avance.

4
Zach Shallbetter

Bonjour @Zach Shallbetter:

Si je comprends votre question, vous cherchez à résoudre votre problème en utilisant des fonctions de thématisation lorsque vous avez vraiment besoin d'utiliser davantage l'API de WordPress. Le code suivant peut être copié dans un fichier test.php et exécuté à l'aide de http://yoursite.com/test.php pour vous permettre de voir son fonctionnement (en supposant que vous remplacez http://yoursite.com par le domaine de votre propre site Web, bien sûr!) Lisez ensuite les commentaires pour savoir où vous voulez placez le code à utiliser sur votre site:

<?php 

// The function should go into your theme's functions.php file
function get_excerpt( $post_id ) {
  $post = get_post( $post_id );
  $excerpt = $post->post_excerpt;
  return ( post_password_required($post) ? false : 
     apply_filters( 'get_the_excerpt', $excerpt ) );
}

include('../wp-load.php');

// This code goes where you need to get and display the excerpt and thumbnail
$post = get_page_by_path('CM-145');
$excerpt = get_excerpt($post->ID);
$thumbnail = get_the_post_thumbnail($post->ID);
?>
<div style="width:300px">
<span style="float:right;"><?php echo $thumbnail; ?></span>
<?php echo $excerpt ?>
</div>

De plus, je crains un peu que vous éprouviez un peu du syndrome "coup de marteau" ; c'est-à-dire que lorsque vous avez un problème et que vous n'avez qu'un marteau, vous traitez le problème comme un clou alors que peut-être avez-vous besoin de trouver un tournevis?

Plus précisément, je crains que vous n'utilisiez une page pour quelque chose qui devrait soit être simplement une option, ou au moins un type de publication personnalisé? Pouvez-vous expliquer votre cas d'utilisation de manière plus détaillée et pourquoi avez-vous choisi d'utiliser une page?

3
MikeSchinkel

changez get_template_part( 'loop' ); en get_template_part( 'loop','page' ); ou insérez manuellement une boucle directement dans ce modèle et voyez si c'est le problème. votre code est par ailleurs correct.

* edit - je suppose que votre fichier de boucle a des vérifications conditionnelles pour déterminer comment afficher les publications dans différents contextes qui ne sont pas remplies par votre requête de page, afin que rien ne soit affiché.

1
Milo