Campos personalizados PHP bucle foreach

4

En mi tema, estoy usando algo de PHP para mostrar contenido de campo personalizado. Comprueba si los campos están vacíos antes de mostrar el contenido, porque the_meta mostraba títulos para campos vacíos.

<div class="customfield-box">
<?php
$ck = get_post_custom_keys($post_id); //Array

        foreach ($ck as $k) {
             if (substr ($k, 0, 1) == '_')
             {   // skip keys starting with '_'
                 continue;
             }
             $cv = get_post_custom_values($k, $post_id );  //Array
                foreach ($cv as $c) {
                    if (empty ($c))
                    {   // skip empty value
                        continue;
                    }
                    $format_c = wpautop( $c, false );
                    print_r ('');
                    print_r ('<h4>' . $k . '</h4>');
                    print_r ('<div class="customfield-content">' . $format_c . '</div>');
                    print_r ('');
                }

        }
?>
</div>

Me gustaría mejorar esto para que el 'div.customfield-box' no se muestre a menos que haya contenido. Necesito hacerme eco dentro del php, pero ¿dónde?

El html resultante debería verse como:

<div class="customfield-box">
    <h4>Ingredients</h4>
    <div class="customfield-content">
        <p>Flour</p>
        <p>Salt</p>
    </div>
    <h4>Allergens</h4>
    <div class="customfield-content">
        <p>Wheat</p>
    </div>
</div>

Si no hay contenido, no debería mostrar nada, ni siquiera el cuadro del campo personalizado.

    
pregunta Jennifer Michelle 20.01.2013 - 16:36

1 respuesta

3

Algo como esto:

$ck = get_post_custom_keys($post_id); //Array

// drop keys starting with '_'
$ck = array_filter($ck, function($key){
 return strpos($key, '_') !== 0;
});

// store your root keys here
$data = array();

foreach($ck as $k){

  $cv = get_post_custom_values($k, $post_id );  //Array

  // drop empty values
  $cv = array_filter($cv);

  if($cv)
    $data[$k] = $cv;

}

if($data){
  // your html here; iterate over $data

  $html = '';

  foreach($data as $key => $contents)
    $html .= sprintf('<h4>%s</h4><div class="customfield-content"><p>%s</p></div>', 
         esc_attr($key), 
         implode('</p><p>', array_map('esc_attr', $contents)));

  printf('<div class="customfield-box">%s</div>', $html);

}else{
  // nothing
}
    
respondido por el onetrickpony 20.01.2013 - 16:52

Lea otras preguntas en las etiquetas