web-dev-qa-db-ja.com

私のフロントページに最新の付箋記事と通常のウィジェットだけを表示させるにはどうすればいいですか?

WP 3.3.1、Suffusion 4.0.2

私は自分のフロントページにstickyとマークされた最新の投稿だけを表示させる方法を見つけようとしています。これを行う方法がドキュメントに見つかりません。

私がやろうとしているのは私のフロントページに表示されるものを制御するために将来の出版後の日付と有効期限の組み合わせ(Atroposプラグイン経由)を使うことです。

助言がありますか?最新のスティックポストを挿入できるようにするためのショートコードを持つプラグインはありますか?

4
O. Jones

私があなたを正しく理解しているならば、あなたはフロントページだけに最新の付箋記事だけを見せたいです。私は1、2か月前に同じ問題を抱えていて、ここWordPress Answersのコミュニティからいくつかの素晴らしい助けを得ました。解決策は、index.phpファイルで2つのループを実行することです。 1つは最新のスティッキーポストのみを引っ張り、もう1つは他のタイプのポストすべてを表示するものです。

これが link ですが、私はこの問題のために私のコードも投稿します。

<?php get_header(); ?>
<?php get_sidebar( 'left' ); ?>

<?php if ( is_home() && !is_paged() ) : ?>
<div id="post-wrapper">
    <?php
        // Get IDs of sticky posts
        $sticky = get_option( 'sticky_posts' );
        // first loop to display only my single, 
        // MOST RECENT sticky post
        $most_recent_sticky_post = new WP_Query( array( 
            // Only sticky posts
            'post__in'            => $sticky, 
            // Treat them as sticky posts
            'ignore_sticky_posts' => 1, 
            // Order by date to get the most recently published sticky post
            'orderby'             => date, 
            // Get only the one most recent
            'posts_per_page'      => 1
        ) );
        ?>

    <?php while ( $most_recent_sticky_post->have_posts() ) :  $most_recent_sticky_post->the_post(); ?>
        <!-- your code to display most recent sticky -->
    <?php endwhile; wp_reset_query(); ?>

<?php endif; ?>

<?php
    $all_other_posts = array(
        'post__not_in'  => get_option( 'sticky_posts' )
    );

    global $wp_query;
    $merged_query_args = array_merge( $wp_query->query, $all_other_posts );
    query_posts( $merged_query_args );
?>

<?php if( have_posts() ) : ?>
    <?php while( have_posts() ) : the_post(); ?>
        <!-- your code to display all other posts -->
    <?php endwhile; ?>
<?php endif; ?>
</div> <!-- end #post-wrapper -->

明らかに、このコードは誰にとってもコピーアンドペーストではありません。それは私がその時持っていたコード構造で私のために働きました。また、厄介なフォーマットを許してください:P

4
cmegown

どうもありがとうございます。とても助かりました。 1つのコメント:最新の投稿をおすすめの投稿として表示したい(つまり投稿が固定されていない場合)、この投稿を通常のリストに複製したくない場合は、最初のループ変更:

while ( $most_recent_sticky_post->have_posts() ) :  $most_recent_sticky_post->the_post(); 

に:

while ( $most_recent_sticky_post->have_posts() ) :  $most_recent_sticky_post->the_post(); 
$do_not_duplicate = $post->ID; 

そして2番目のループで、次のように変更します。

if( have_posts() ) : while( have_posts() ) : the_post();

if( have_posts() ) : while( have_posts() ) : the_post();
if( $post->ID == $do_not_duplicate ) continue;

ブルース

1
Bruce