0

ExpressionEngineでは、「ループ」のバージョンで、次のような任意の要素にタグを追加できます。

<li class="{switch='one|two|three|four|five|six'}">

liの最初の反復にはクラス1があり、次の反復は2で、ループは6の後に再びなります。私はワードプレスサイトでこの同様の機能を必要としていますが、それを達成する方法がわかりません。組み込みのワードプレス関数はありますか、それともphpで何らかの関数をコーディングする必要がありますか?

現在、@ Leonardのソリューションを使用するためにこれを使用していますが、クラス「4」はサイクリングではなく何度も繰り返されています

<?php

$argsGallery = array(
    'post_type' => 'gallery',
    'orderby'       => 'menu_order',
    'order'         => 'ASC'
);
$the_query = new WP_Query( $argsGallery );

// The Loop
while ( $the_query->have_posts() ) : $the_query->the_post();?>

            <div class="<?php cycle('four|three|five|two|six|four'); ?> columns">
                <div class="thumb">

                    <a class="jackbox" 
                        data-group="images" 
                        data-thumbnail="<?php the_field('image'); ?>" 
                        data-title="Image One" 
                        data-description="#description_1" 
                        href="<?php the_field('image'); ?>"
                    >
                        <div class="jackbox-hover jackbox-hover-black">
                            <p><?php the_field('image_description'); ?> </p>
                        </div>
                        <img 
                            src="<?php the_field('image'); ?>" 
                            alt="responsive lightbox" 
                        />
                    </a>
                </div>
            </div>

<?php
    endwhile;
    wp_reset_query();
    wp_reset_postdata();
?>
4

3 に答える 3

1

まったく同じものを探しているときにこの質問を見つけました...投稿してから20分後のGoogleのトップ。クレイジー...とにかく!

私は、functions.phpにドロップインでき、標準のWordpressループで動作する、テスト済みの関数を(すばやくではありますが)思いつきました。いくつかのニーズに適応する必要があるかもしれませんが、うまくいけば、それは良い出発点です。

$ wp_query配列からのcurrent_postカウントを使用し、サイクル値のどこにある必要があるかを判断します。

function cycle($input, $delimiter = '|', $query = false) {

    if($query == false):
        global $wp_query ;
        $current_post = $wp_query->current_post + 1;
    else:
        $current_post = $query->current_post + 1;
    endif;


    $switches = explode($delimiter, $input);

    $total_switches = count($switches) ;
    $current_set = ceil( $current_post / $total_switches)  ;

    $i = (($current_post - ($current_set * $total_switches)) + $total_switches) - 1 ;

    echo $switches[$i];

}

次に、次のようにSTANDARDループで使用できます。

 <?php cycle('first|second|third|fourth'); ?>

または、必要に応じてカスタム区切り文字を使用できます。

 <?php cycle('first*second*third', '*'); ?>

または、CUSTOM wp_queryで使用する場合は、3番目の引数として入力されたクエリで次のように使用する必要があります。

 <?php cycle('first|second|third', '|', $the_query); ?>

そのカスタムクエリをフィードするためのよりきちんとした方法があると確信しています。方法を見つけたら、探し続けて更新します。

于 2013-01-17T17:23:41.210 に答える
0

私は十分なWPを知っています、そして私はそのようなものを見たことがありません。たぶんそれExpressionEngineが支払われる理由です(すでにそのような組み込みのソリューションがあります。WPでは手元でそれを行う必要があります)。ここにあなた自身でそれを作るためのアイデアがあります:

更新:@jason-mccrearyの答え私は間違っていたことを知っています。私は何も知りませんでしたcycles。しかし、ここにそのように機能するように見えるスニペットがあります:

function cycle($chunks)
{   
    if ( ! is_array($array = explode('|', $chunks)))
        return;

    static $i    = 0;
    echo $array[$i ++];
    if ($i >= count($array))
        $i   = 0;
}
?>

<?php for ($i = 0; $i < 9;  ++ $i) : ?>
    <li class="<?php echo cycle('one|two|three|four|five|six'); ?>"></li>
<?php endfor; ?>

出力

<li class="one"></li>
<li class="two"></li>
<li class="three"></li>
<li class="four"></li>
<li class="five"></li>
<li class="six"></li>
<li class="one"></li>
<li class="two"></li>
<li class="three"></li>
于 2013-01-17T16:10:55.717 に答える
0

これはサイクル関数として知られています。残念ながら、PHPにはそのような機能がネイティブにありません。

次のいずれかの方法でカスタム作成する必要があります。

  • 関数を作成します。これが良い例です。
  • カウンターモジュラスを使用して、ループ内で直接。以下は、考案された例です。

    $cycles = array('one', 'two', 'three');
    for ($i = 0; $i < 9; ++$i) {
      echo $cycles[$i % 3];
    }
    
于 2013-01-17T16:36:12.720 に答える