web-dev-qa-db-fra.com

Identifiant pour les posts/blogs

J'ai un site Web qui a une page d'accueil statique et une page de blog où tous les blogs sont affichés.

J'utilise mon propre thème et j'ai créé des boîtes à méta personnalisées qui affichent le contenu dans une barre latérale en fonction de la valeur renvoyée par $post->ID. Le comportement intéressant que j'obtiens est que $post->ID me donne l'ID du premier blog et non l'id de la page de blog elle-même. J'utilise $ post en dehors de la boucle et l'ai déclaré global mais en vain. J'ai aussi essayé d'utiliser $wp_query->post->ID mais cela me donne l'ID du dernier message.

Le code correspondant est celui où j'utilise $ post est ci-dessous, ce code est situé dans footer.php:

<?php require_once('wp-content/plugins/markdown.php'); ?>
    <aside class="left-column">
        <?php
            global $post;
            $leftSidebar = get_post_meta( $post->ID, '_my_meta', true );
            // Convert markdown to HTML and then convert smilies
            if ( isset( $leftSidebar['leftContent'] ) ) {
                echo convert_smilies( markdown( $leftSidebar['leftContent'] ) );
            }
        ?>
    </aside>

Le code utilisé pour la boucle est ci-dessous et est placé dans index.php:

get_header(); ?>

<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
    <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <header>
            <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
            <div class="post-date"><?php the_time(get_option( 'date_format' )); ?></div>
        </header>
        <?php the_excerpt(); ?>
        <footer class="post-footer">
            <div class="categories">Posted in: <?php the_category(', '); ?></div>
            <div class="tags">Tags: <?php the_tags(); ?></div>
        </footer>
    </article>
   <?php endwhile; ?>
<?php else : ?>
    <article>
        <h3>Not Found</h3>
        <p>Sorry, but you are looking for something that is not available</p>
    </article>
<?php endif; ?>

S'il vous plaît laissez-moi savoir si d'autres informations sont nécessaires. S'il existe un moyen de trouver l'ID de la page de blog par programme et de faire en sorte que la page de blog se reconnaisse comme étant la page de blog et non le premier message susceptible de résoudre le problème, je pense.

Merci d'avance.

4
navanitachora

envisager d'utiliser:

$postspage_id = get_option('page_for_posts'); 

puis modifiez la ligne respective dans votre code en:

$leftSidebar = get_post_meta( $postspage_id, '_my_meta', true ); 

à partir de: http://www.blog.highub.com/cms/wordpress/wordpress-front-page-posts-page-id/

7
Michael

Si vous utilisez query_posts (ce qui présente des inconvénients car il modifie la boucle principale), comme le dit le Codex _,

Si vous devez utiliser query_posts (), assurez-vous d'appeler wp_reset_query () après avoir terminé.

(Voir codex wp_reset_query() ) pour Par exemple

// The Query
query_posts( $args ); //your $args

// The Loop
while ( have_posts() ) : the_post();
      //Display title, content here etc.
endwhile;

// Reset Query afterwards
wp_reset_query();

Si vous n'utilisez pas query_posts, vous pouvez devez toujours utiliser wp_reset_postdata() qui ...

Après avoir parcouru une requête distincte, cette fonction restaure le $ post global à la publication actuelle de la requête principale.

1
Stephen Harris