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!
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' ) );
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...
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>
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>';
}
?>
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;