gordon smith
Estoy usando campos personalizados avanzados (ACF) para extraer información del repetidor de una página de eventos y mostrar una lista abreviada de los eventos en la página de inicio.
Configuré un repetidor para permitir que el usuario ingrese en qué mes se llevará a cabo el evento (lo que les permite incluir varios meses de eventos), luego un subrepetidor para permitirles agregar múltiples eventos para el mes dado. Ejemplo a continuación:
Marzo
- evento del 9 de marzo
- evento del 12 de marzo
- evento del 28 de marzo
Abril
- evento del 1 de abril
- evento del 28 de abril
Esta es la salida actual en la página de eventos y funciona según lo previsto.
En la página de inicio del sitio web, necesito extraer los 3 eventos más nuevos (el evento que se encuentra al final de la lista es el evento más nuevo) y mostrarlos en la página de inicio.
No tengo problemas para extraer y mostrar los eventos en la página de inicio. Tengo un problema con mostrar los eventos cuando los últimos tres eventos (el repetidor secundario) se cruzan entre meses (el repetidor principal).
Simplemente limitar la salida del evento usando un bucle php a través de las declaraciones if, while, solo limita la cantidad de salida de eventos en ese mes. Mi código que estoy usando actualmente en la página de inicio, se encuentra a continuación.
<?php if( have_rows('event_month', 1263)): ?>
<ul>
<?php while ( have_rows('event_month', 1263) ) : the_row(); ?>
<?php if( have_rows('event', 1263)):; ?>
<?php while ( have_rows('event', 1263) ) : the_row(); ?>
<li>
<h3>
<a href="https://stackoverflow.com/questions/43106718/<?php echo esc_url( home_url("https://stackoverflow.com/" ) ); ?>events/"><?php $summary = get_sub_field('event_title');
echo substr($summary, 0, 34),'...'; ?></a>
<span><?php the_sub_field('event_day_of_week');?>, <?php the_sub_field('event_sub_month');?> <?php the_sub_field('event_day');?></span>
</h3>
</li>
<?php endwhile; ?>
<?php else: ?>
<p>Show dates to be announced soon.</p><?php the_sub_field('event_title'); ?>
<?php endif; ?>
<?php endwhile; ?>
</ul>
Cómo se vería mi resultado deseado en la página de inicio si capturamos los tres últimos eventos:
- evento del 28 de marzo
- evento del 1 de abril
- evento del 28 de abril
Nishanth Matha
Probablemente deberías estar usando for
en vez de while
. Y considere el siguiente algoritmo:
1) Obtener el
last row from event_month
2) Contar el número de eventos en ese mes
3) Si el número de eventos es mayor o igual a 3.
3.1) Obtenga los últimos 3 eventos y muéstrelos
4) De lo contrario, cuente el número de eventos restantes (
3-<<events in last month>>
)4.1) Ahora obtenga la penúltima fila y repita los pasos 2,3,4
Entonces, usando la lógica anterior, su código debería verse así:
<?php
function getEvents($rows, $noOfEvents){
$resultArray = array();
if($rows && count($rows > 0)) {
$events = $rows[count($rows)-1]['event'];
$events = is_array($events) ? $events : array();
$eventCount = count($events);
if($eventCount < $noOfEvents){
$noOfOtherEvents = $noOfEvents-$eventCount;
array_pop($rows);
$iterate = getEvents($rows,$noOfOtherEvents);
$resultArray = array_merge($events,$iterate);
}
else{
$resultArray = array_slice($rows, 0-$eventCount, $eventCount);
}
return $resultArray;
}
$rows = get_field('event_month', 1263);
if($rows) {
$requiredEvents = getEvents($rows,3); //3 or how many ever last you want
foreach($requiredEvents as $event){
var_dump($event); //this should have all you need like $event['event_title'],$event['event_day'],ect...
}
}
-
Gracias por tu respuesta. Intenté implementar su código en el sitio, pero rompió la página que indicaba que $requiredEvents => $event produce un error de sintaxis ‘inesperado ‘=>’ (T_DOUBLE_ARROW)’. No conozco PHP lo suficientemente bien como para resolver ese problema. Podría profundizar en ello, pero pensé que podría ofrecer consejos adicionales.
– Gordon Smith
5 de abril de 2017 a las 16:58
-
@GordonSmith eso fue un error tipográfico
=>
debiera seras
consulte editar! ¡Y necesitas mejorar tus habilidades de php!– Nishant Matha
6 de abril de 2017 a las 0:54
-
Gracias por la edición. Estoy de acuerdo, y sigo mejorando día a día. Le daré una oportunidad e informaré.
– Gordon Smith
06/04/2017 a las 15:50
Puede que esta no sea la respuesta que todos estaban buscando en este caso, pero esto es lo que hice como solución alternativa, que funcionó lo suficientemente bien para mí.
Terminé resolviendo el problema fuera de php, usando css para seleccionar los últimos tres elementos de la lista. Esto es lo que usé, funcionó muy bien.
.connect-list-wrapper ul li
{
display: none;
}
.connect-list-wrapper ul li:nth-last-child(-n+3)
{
display: block;
}
¿Alguna razón para no usar un solo repetidor con un campo de entrada de fecha? Luego puede extraer el mes de él para jugar bien con su código en otra parte del sitio, y facilitaría la clasificación de las entradas más recientes en la página de inicio.
– Leland
5 de abril de 2017 a las 3:32
@Leland: le agradezco que pregunte, ya que es algo que no había considerado. Aquí hay un enlace a la página que muestra los eventos dentro de cada mes. ardentsolutionsllc.com/eventos Si tuviera que usar solo un repetidor, no sabría cómo asociar los eventos con cada mes. La página de inicio muestra la lista de eventos (abajo a la derecha) que estoy tratando de acortar, para mostrar solo 3 de los últimos eventos, que generalmente aparecen al final de cada mes en la página de eventos.
– Gordon Smith
5 de abril de 2017 a las 16:36
De acuerdo, estoy releyendo tu publicación; quieres, en la página de inicio, los 3 más recientes eventos agregados? Es decir, ¿quieres en la página de inicio los 3 eventos que se crearon más recientemente en el administrador de WordPress? ¿O preferiría tener los 3 eventos que están ocurriendo más pronto hasta hoy?
– Leland
5 de abril de 2017 a las 17:25
@Leland Me gustaría ver los tres últimos eventos que aparecen en la parte inferior de la página de eventos (desde el enlace de arriba). Normalmente, usaría el método sugerido por Elliott aquí support.advancedcustomfields.com/forums/topic/… pero no funcionará porque es posible que algunos eventos deban incorporarse en meses repetidos (a veces, por ejemplo: 2 eventos publicados en mayo requerirían 1 evento extraído de abril para hacer 3 en la página de inicio).
– Gordon Smith
5 abr 2017 a las 20:49
Oye, perdón por todas las preguntas. Tengo un código con el que podría ayudarte, pero solo quiero entender un poco mejor lo que estás buscando. Desea los “tres eventos más recientes… en la parte inferior de la página de eventos”. En otras palabras, ¿quieres los 3 eventos más lejanos en el futuro? ¿Es eso correcto?
– Leland
5 abr 2017 a las 21:01