모든 세 번째 게시물을 표시하는 방법


17

내 밴드의 WordPress 사이트에서 작업하고 있으며 블로그 페이지의 모든 3 번째 게시물에 특수 클래스가 적용되도록 표시하고 싶습니다. 어떤 도움이라도 대단히 감사합니다! 락 앤 롤.

답변:


15

내 접근 방식. 추가 기능이나 필터가 없습니다. :)

<?php $GLOBALS['wpdb']->current_post = 0; ?>
<div <?php post_class( 0 === ++$GLOBALS['wpdb']->current_post % 3 ? 'third' : '' ); ?>>

대안 :

<div <?php post_class( 0 === ++$GLOBALS['wpdb']->wpse_post_counter % 3 ? 'third' : '' ); ?>>

이것은 @toscho를 죽였습니다! 이것은 카테고리 페이지에서 이것을 사용했기 때문에 가장 효과적이며 fn은 모든 곳에서 게시물을 스타일링했습니다. 고마워, +1 나는 아직 공식적으로 +1 할 수있는 권한이 있다고 생각하지 않습니다.
Zoran M

1
이것이 실제로 사전 증가 연산자로 인해 Globals 값에 영향을 미치지 않고 current_post count 속성에 따라 다른 것을 망칠 수 있습니까? 내 말은, 가능성은 적지 만, (0 === ($ GLOBALS [ 'wpdb']-> current_post + 1) % 3? 'third': '')하는 것이 더 안전하지 않습니까?
Tom Auger

1
@TomAuger 그다지 명백하지 않은 이유로 부작용이없는 것 같습니다. 그러나 우아함의 관점에서 – 당신은 옳습니다. 더 좋은 예를 추가했습니다. :)
fuxia

4
Notice: Undefined property: wpdb::$current_post in
Knott

9

@helgathevikings 답변 외에도

전역 네임 스페이스를 오염시키지 않고 post_class () fn을 사용하십시오.

  1. static클래스 내에서 변수를 사용하면 전역 변수를 갖는 것과 동일한 동작을 수행 할 수 있습니다. 변수를 변경하지 않으면 그대로 유지되고 변경되지 않습니다.
  2. @Milo가 의견에서 제안한 것처럼 더 나은 것은 DB 클래스에서 현재 게시물을 가져옵니다.
예 :
function wpse44845_add_special_post_class( $classes )
{
    // Thanks to @Milo and @TomAuger for the heads-up in the comments
    0 === $GLOBALS['wpdb']->current_post %3 AND $classes[] = 'YOUR CLASS';

    return $classes;
}
add_filter( 'post_class','wpse44845_add_special_post_class' );

최신 정보

current_post전역 $wp_query객체 의 속성을 활용할 수 있습니다. 키워드 와 함께 익명 함수를 사용하여 참조로 use전역을 전달 합시다$wp_query ( PHP 5.3+ ).

add_filter( 'post_class', function( $classes ) use ( &$wp_query )
{
    0 === $wp_query->current_post %3 AND $classes[] = 'YOUR CLASS';

    return $classes;
} );

또한 조건부 검사 를 통해 메인 루프 로 제한 할 수 in_the_loop()있습니다.


1
나는 그것을 좋아한다. 정적 변수를 이해하지 못합니다. 오늘 배울 것이 하나 더 있습니다!
helgatheviking

3
왜 그냥 사용하지 $wpdb->current_post않습니까?
Milo

@Milo Good catch +1
kaiser

정말 고마워요, 정말 감사합니다! 이것을 지금 추가하십시오!
Zoran M

아이 기능은 나쁜 @ 카이저이며 아름답게 간단합니다! 카테고리 페이지에 필요한 것이 있다는 것이 밝혀졌습니다. 이것은 나중에 친구를 사 life 수있게 해줄 것입니다. 새로운 것을 배워 주셔서 감사합니다. +11!
Zoran M

3

테마가 post_class ()를 사용하여 포스트 클래스를 생성하는 경우 시도해 볼 수 있습니다. 나는 그것이 페이지 매김을 처리하는 방법을 100 % 확신하지 못한다 .b / ci 로컬 설치에 테스트 할 충분한 게시물이 없다.

add_filter('post_class','wpa_44845');

global $current_count;

$current_count = 1;

 function wpa_44845( $classes ){

    global $current_count;

    if ($current_count %3 == 0 ) $classes[] = 'special-class';

    $current_count++;

    return $classes;

 }

100 % 확실하지는 않지만 네임 스페이스를 깨끗하게 유지하기 위해 statica 대신 var를 사용할 수 있다고 생각합니다 global. 어쨌든 : +1.
kaiser

전역 $ current_count를 정적 $ current_count로 변경 하시겠습니까? 테스트 할 때 아무것도하지 않는 것 같습니다. 변수 범위에 익숙하지는 않지만 가능한 경우 네임 스페이스를 오염시키지 않는 것이 좋습니다.
helgatheviking


3
$wpdb->current_post다른 변수를 만들지 않고도 사용할 수 있습니다 .
Milo

2
$i = 0;
if ( have_posts ) :
while( have_posts ) :
    the_post();

    $class = 'class="BASIC-CLASS';
    if ( 0 === ( $i % 3 ) )
        $class .= 'YOUR-SPECIAL-CLASS';
    $class .= '"';

    echo "<div {$class}>";
        // do stuff
    echo '</div>';

    $i++;
endwhile;
endif;

1

CSS와 자바 스크립트로이를 수행하는 방법도 있습니다.

CSS3에서는 n 번째 자식 선택기로 세 번째 게시물을 모두 타겟팅합니다.

article.post:nth-child(3n+0)
{
    background-color: #777;
}

또는 jQuery를 사용하면 동일한 기술을 사용하여 CSS 클래스를 추가 할 수 있습니다.

jQuery(function($) {
    $( "article.post:nth-child(3n+0)" ).addClass("custom-class");
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.