2009-08-13 8 views
0

私のホームページには投稿のリストがあり、一番上には最新の「スティッキーな」投稿とそれ以外の投稿が表示されます。これを達成する方法はありますか?掲示板の一番上にスティッキーポストを1つだけ表示する

1つだけを使用するためのボーナスポイントquery_posts()

(私は2 query_posts()を使用してそれを行う方法を知っているが、私はあまり課税ソリューションを探しています。)

+0

他の投稿の「スティッキー」オプションをチェックすると、リストの上部に2つのスティッキーポストが表示され、新しい「スティッキー」投稿を追加し続けるうちに、これらのスクロールが拡大し続けます。私は1つの粘着性のある投稿が表示されるだけです。 – gabriel

答えて

0

あなたはこのコードを少し微調整する必要がありますが、それはあなたが右に行くを取得する必要があります方向。これは、投稿をプルするために使用されるSQLクエリを変更することです。

あなたの前にあなたのquery_posts();次のコードを追加してください:

function selectSticky($sql){ 
    global $sticky_posts, $wpdb; 

    $sticky_posts = get_option('sticky_posts'); 
    $sticky_posts = implode(', ', $sticky_posts); 

    return "IF({$wpdb->posts}.ID IN ($sticky_posts), 2, 1) as sticky, ".$sql; 
} 

function whereSticky($sql){ 
    global $sticky_posts, $wpdb; 

    $sql .= " OR {$wpdb->posts}.ID IN ($sticky_posts)"; 
    return $sql; 
} 

function orderSticky($sql){ 
    $sql = "sticky DESC, ".$sql; 
    return $sql; 
} 

// just for checking sql, you can remove this once everything works 
function requestSticky($sql){ 
    echo $sql."<br/><br/>"; 
    return $sql; 
} 

add_action('posts_fields', 'selectSticky'); 
add_action('posts_where', 'whereSticky'); 
add_action('posts_orderby', 'orderSticky'); 
add_action('posts_request', 'requestSticky'); 
+0

応答に感謝します!うわー、私はこのような巨大なコード量を含むようにとても単純なようなものは期待していませんでした!また、WPコアチームが 'wp_posts'テーブルに「スティッキー」カラムを追加していないのはなぜだろうか... – gabriel

+0

正しい結果を返すSQLクエリが分かっていれば、最初の3つのアクション/関数を呼び出し、requestSticky()でクエリを返します。私の頭の上にはありませんが、UNIONクエリを使用して複数のスティッキー問題の解決策を想像することはできますが、これはSQLのオーバーヘッドを大幅に削減します。 – postpostmodern

1

プラグインを試しましたか?たとえばこれは? http://wordpress.org/extend/plugins/wp-sticky/私はそれらを使用/変更する方が簡単かもしれません。

+0

ありがとうございます、Umutですが、私はすでにWP Coreにある機能を複製するプラグインを使用しない方がよいでしょう。 – gabriel

関連する問題