web-dev-qa-db-ja.com

投稿/ブログページのID

静的なフロントページと、すべてのブログが表示されるブログページがあるWebサイトがあります。

私は自分のテーマを使用しており、$post->IDからの戻り値に基づいてサイドバーにコンテンツを表示するカスタムメタボックスをいくつか作成しました。私が得ている面白い振る舞いは、$post->IDが私にブログページ自体のIDではなく最初のブログのIDを与えることです。私はループの外側で$ postを使っていて、グローバルに宣言しましたが、役に立ちません。私も$wp_query->post->IDを使ってみました、しかしそれは私に最後の記事のIDを与えます。

関連するコードは、$ postを使用する場所です。このコードの下の部分は、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>

ループに使用されるコードは以下のとおりで、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; ?>

それ以上の情報が必要かどうか私に知らせてください。ブログページのIDをプログラムで見つけて、ブログページを自分自身をブログページとして認識させ、最初の投稿ではないようにする方法があれば、問題は解決すると思います。

前もって感謝します。

4
navanitachora

使用を検討してください。

$postspage_id = get_option('page_for_posts'); 

次に、コードの中の次の行を次のように変更します。

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

から: http://www.blog.highub.com/cms/wordpress/wordpress-front-page-posts-page-id/

7
Michael

Codex が言うように、query_posts(メインループを変更するのでいくつかの欠点があります)を使っているなら、

Query_posts()を使用しなければならない場合は、終了後に必ずwp_reset_query()を呼び出してください。

(codex wp_reset_query() )を参照してください。

// 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();

query_postsを使用していないのであれば、 may を使用する必要があります wp_reset_postdata() which ...

別のクエリをループした後、この関数はメインクエリの現在の投稿にグローバル$ postグローバルを復元します。

1
Stephen Harris