vale plugin pena instalar funciones estructura editar codigo aprender actualizar php wordpress

php - plugin - Incluye "preguntas requeridas" en una selección aleatoria



vale la pena aprender wordpress (2)

Estoy seleccionando un conjunto de preguntas aleatorias sin ningún duplicado usando lo siguiente:

<?php $amount = get_field(''select_number_of_questions''); $repeater = get_field("step_by_step_test"); shuffle($repeater); $repeater_limit = array_slice($repeater,0,$amount); foreach($repeater_limit as $repeater_row) { echo "<p>".$repeater_row[''question'']."</p>"; $rows = $repeater_row[''answer_options'']; foreach($rows as $row) { echo $row[''answer'']."<br />"; } } ?>

Cada pregunta tiene un campo: get_field(''required_question''); que tiene un menú desplegable de sí / no. Las preguntas que sí se han seleccionado SIEMPRE deben incorporarse al ciclo anterior.

Por ejemplo, la prueba tiene 20 preguntas para seleccionar, 10 se seleccionarán al azar. Dentro de las 20 preguntas, hay 2 preguntas requeridas (es decir, estas siempre serán seleccionadas). Por lo tanto, tendrá que tomar las 2 preguntas requeridas y seleccionar otras 8 preguntas al azar.

¿Cómo puedo incluir las preguntas requeridas dentro de la selección al azar?


Primero, debe filtrar las preguntas requeridas de la siguiente manera:

$all_questions = get_field("step_by_step_test"); $required = $optional = array(); foreach($all_questions as $question) { if( $a[''required_question'']) $required[] = $question; else $optional[] = $question; } $amount = get_field("select_number_of_questions")-count($required); shuffle($optional); $final = array_merge($required,array_slice($optional,0,$amount)); foreach($final as $repeater_row) { ... }

Espero haberte ayudado de nuevo: p


La pregunta no lo indica, pero todos sugieren que se trata de un campo personalizado avanzado configurado con el complemento Repeater .

En ese caso, esta es la configuración de prueba que he hecho:

Tenga en cuenta que aquí estoy usando $repeater_row[''title''] lugar de $repeater_row[''question''] OP $repeater_row[''question''] del OP. Además, answer_options parte answer_options . Ver comentarios para más detalles:

// Get fields $amount = get_field( ''select_number_of_questions'' ); $repeater = get_field( ''step_by_step_test'' ); // Auxiliary arrays to separate fields by Field Name $not_enabled = array(); $enabled = array(); // Separate foreach( $repeater as $field ) { if( ''no'' == $field[''enabled''] ) $not_enabled[] = $field; else $enabled[] = $field; } // Discount the enabled from the the total amount $amount = (int)$amount - count( $enabled ); // Shuffle before slicing shuffle( $not_enabled ); $repeater_limit = array_slice( $not_enabled, 0, $amount ); // Add enabled fields and shuffle again $final_array = array_merge( $repeater_limit, $enabled ); shuffle( $final_array ); foreach( $final_array as $repeater_row ) { echo "<p>" . $repeater_row[''title''] . "</p>"; }