wake-up-neo.net

Wie zählt man die Gesamtzahl der Zeilen in einer ACF-Repeater-Ausgabe?

Frage: Wie zählt man einfach die Zeilen in der Ausgabe eines ACF-Repeater-Feldes?

Ziel: Die Ausgabe mit einer CSS-Klasse anders aussehen lassen, wenn es nur eine Zeile im Vergleich zu mehr als einer Zeile gibt.

Mein Code:  

if( have_rows('testimonials')) {
    $counter = 0;
    $numtestimonials = '';

    //loop thru the rows
    while ( have_rows('testimonials') ){
        the_row();
        $counter++;
            if ($counter < 2) {                         
                $numtestimonials = 'onlyone';               
            }
        echo '<div class="testimonial ' . $numtestimonials . '">';
           // bunch of output here
        echo '</div>';                          
    }
}

Die Art und Weise, wie ich es hier mache, wird offensichtlich nicht funktionieren, da die Zählung beim ersten Durchlauf der Zeile <2 ist. Sie gibt also true zurück, auch wenn mehr Zeilen gezählt werden.

Vielen Dank!

4
Robert

OK, ich habe endlich die Antwort darauf gefunden.

Die Anzahl der Zeilen in einem ACF-Repeater kann folgendermaßen gezählt werden:

$numrows = count( get_sub_field( 'field_name' ) );
15
Robert

Sie können die Zeilenzahl folgendermaßen erhalten:

$count = get_post_meta(get_the_ID(), 'testimonials', true);

Natürlich verwendet dies get_the_ID(), um die aktuelle Beitrags-ID abzurufen. Möglicherweise müssen Sie dies ändern.

ACF speichert den Repeater-Zählwert gegen den Repeater-Feldnamen als meta_key in der Postmeta-Tabelle.

ACF verwendet die Anzahl, um die korrekten Repeater-Unterfeldwerte abzurufen, die als Werte für Meta_keys mit dem Format $repeaterFieldname . '_' . $index . '_' . $subfieldName gespeichert werden.

Hoffe das hilft...

0
DavidCara

Möglicherweise möchten Sie dies versuchen.

<?php 
$row = get_field('repeater', $post->ID);
if($row < 1) {
 $rows = 0;
} else {
 $rows = count($row);
} ?>
<p>Number of Row is (<?php echo $rows ; ?>)</p>
0
KennethRules

Arbeiten mit dem Repeater-Feld

auf den Repeater kann über get_field oder das_repeater_field/the_sub_field zugegriffen werden

<?php if( have_rows('repeater_field_name') ): ?>

    <ul>

    <?php while( have_rows('repeater_field_name') ): the_row(); ?>

        <li>sub_field_1 = <?php the_sub_field('sub_field_1'); ?>, sub_field_2 = <?php the_sub_field('sub_field_2'); ?>, etc</li>

        <?php 

        $sub_field_3 = get_sub_field('sub_field_3'); 

        // do something with $sub_field_3

        ?>

    <?php endwhile; ?>

    </ul>

<?php endif; ?>

Wähle zufällig eine Repeater-Feldzeile

<?php

$rows = get_field('repeater_field_name');
$row_count = count($rows);
$i = Rand(0, $row_count - 1);

echo $rows[ $i ]['sub_field_name'];

?>

Werte von einer anderen Seite holen

<?php

$other_page = 12;

?>
<p><?php the_field('field_name', $other_page); ?></p>
<?php

// get variable
$variable = get_field('field_name', $other_page);

// repeater field: note that the_sub_field and get_sub_field don't need a post id parameter
if( have_rows('repeater_field_name', $other_page) ): ?>

    <ul>

    <?php while( have_rows('repeater_field_name', $other_page) ): the_row(); ?>

        <li>sub_field_1 = <?php the_sub_field('sub_field_1'); ?>, sub_field_2 = <?php the_sub_field('sub_field_2'); ?>, etc</li>

        <?php 

        $sub_field_3 = get_sub_field('sub_field_3'); 

        // do something with $sub_field_3

        ?>

    <?php endwhile; ?>

    </ul>

<?php endif; ?>

Abfragen von Beiträgen mit ACF-Werten

Ein Beispiel für das Finden von Ereignissen (Post-Typ), bei dem Standort (benutzerdefiniertes Feld - Auswahl) Melbourne (Wert) entspricht. Viel zu lesen hier: http://codex.wordpress.org/Template_Tags/get_posts .

<?php

$posts = get_posts(array(
    'numberposts' => -1,
    'post_type' => 'event',
    'meta_key' => 'location',
    'meta_value' => 'melbourne'
));

if($posts)
{
    echo '<ul>';

    foreach($posts as $post)
    {
        echo '<li><a href="' . get_permalink($post->ID) . '">' . get_the_title($post->ID) . '</a></li>';
    }

    echo '</ul>';
}

?>
0
Owais Alam

Sie möchten den Wert in $numtestimonials zurücksetzen.

Der Code mit einem Fix wäre also effektiv:

$output = "";
$numtestimonials = "";

while ( have_rows('testimonials') ){
    the_row();
    $counter++;
    $output .= "<span>" .$some_data. "</span>"; // bunch of output;
}

if($counter < 2){
    $numtestimonials = "onlyone";
}
$output = "<div class='testimonail ".$numtestimonials." '>"
              .$output
         ."</div>";
echo $output;
0
Dhruv Saxena