1

Ich verwende Repeater of Advanced benutzerdefinierte Felder für den Inhalt meiner zusätzlichen benutzerdefinierten WooCommerce Registerkarte. Der Repeater befindet sich in einem Gruppenfeld.Verwenden von erweiterten benutzerdefinierten Feldern Repeater-Feld in WooCommerce benutzerdefiniertes Produkt Tab

Ich kann die benutzerdefinierten Felder außerhalb des Repeater-Felds anzeigen.

ist hier der Code, den ich in meinem functions.php verwendet:

add_filter('woocommerce_product_tabs', 'dl_custom_product_designer_tab'); 
function dl_custom_product_designer_tab($tabs) { 
    // ensure ACF is available 
    if (!function_exists('have_rows')) 
     return; 

    if (get_field('designer')) { 
     $tabs[] = array(
      'title' => 'DESIGNER', 
      'priority' => 50, 
      'callback' => 'dl_custom_designer_tab' 
     ); 
    } 
    return $tabs; 
} 

function dl_custom_designer_tab() { 
    $designer = get_field('designer'); 
     echo '<p>'.$designer['designer_image'].'</p>'; 
     echo '<p>'.$designer['designer_name'].'</p>'; 
     echo '<p>'.$designer['designer_short_description'].'</p>'; 
     // loop through the rows of data 
     $achievements = get_field('designer_achievements'); 
     if($achievements) { 
      // loop through the rows of data 
      echo '<ul>'; 
      foreach($achievements as $achievement){ 
       // display a sub field value 
       echo '<li>'.$achievement['achievement'].'</li>'; 
      } 
      echo '</ul>'; 
     } 
} 

Jetzt ist das Problem das Feld in meinem Repeater Feld ist: Das Repeater Unterfeld nichts anzeigt wird.

Was mache ich falsch? Wie kann ich die Ausgabe für die Repeater-Unterfelder haben?


Bearbeiten: A screenshot of the ACF settings repeater field.

+0

Das Repeater-Feld gibt Ihnen ein Array zurück. Wenn Sie also nur eine Zeile im Repeater-Feld haben, sollte es '$ designer [0] ['designer_image']' sein usw. Wenn Sie mehr haben, sollten Sie eine Schleife verwenden ... – Shibi

+0

@JohnAshleyNohay Ich habe meine Antwort aktualisiert. – LoicTheAztec

Antwort

0

UPDATE(neue funktionale Alternative):

Anscheinend hat funktioniert nicht mit "Produkt" post-Typ ... ** Das sieht wie ein Fehler in diesem Plugin (ich in der Lage gewesen, um den gleichen Fall zu testen und das Problem zu reproduzieren).

Es sollte den Autoren berichtet werden Support-Laufflächen ... Ich habe es auf meiner Seite tun.


Eine temporäre Lösung (solange diese Fehler nicht durch ACF-Team gelöst)

Dies ist benutzerdefinierte Funktion Ersatz für ACF Repeaterfunktionen gewidmet:

/** 
* Custom function: Get an array of ACF repeater sub-field. 
* 
* @param string $master_field (the 
* @param string $repeater_field 
* @param array $sub_fields 
* @output formatted html 
*/ 

function repeater_subfield($group_name, $repeater, $subfield){ 
    global $post, $product; 

    $repeater_meta_key = $group_name.'_'.$repeater; 
    $rows = get_post_meta($post->ID, $repeater_meta_key, true); 
    for($i = 0; $i < $rows; $i++){ 
     $subfield_meta_key = $repeater_meta_key.'_'.$i.'_'.$subfield; 
     $output[] = get_post_meta($post->ID, $subfield_meta_key, true); 
    } 
    if(count($rows) > 0) return $output; 
    else return; 
} 

Dann sollte Ihr getesteter und funktionaler Code sein:

// Add a custom product tab 
add_filter('woocommerce_product_tabs', 'dl_custom_product_designer_tab'); 
function dl_custom_product_designer_tab($tabs) { 
    // ensure ACF is available 
    if (!function_exists('have_rows')) 
     return; 

    if (get_field('designer')) { 
     $tabs[] = array(
      'title' => 'DESIGNER', 
      'priority' => 50, 
      'callback' => 'dl_custom_designer_tab' 
     ); 
    } 
    return $tabs; 
} 

// The custom product tab content 
function dl_custom_designer_tab() { 
    global $post, $product; 

    $group_name = 'designer'; 

    $designer = get_field($group_name); 

    echo '<p>'.$designer['designer_image'].'</p>'; 
    echo '<p>'.$designer['designer_name'].'</p>'; 
    echo '<p>'.$designer['designer_short_description'].'</p>'; 

    $designer_achievements = repeater_subfield($group_name, 'designer_achievements', 'achievement'); 

    // check if the repeater field has rows of data 
    if(count($designer_achievements) > 0): 
     echo '<ul>'; 

     // loop through the rows of data 
     foreach($designer_achievements as $achievement){ 
      // display a sub field value 
      echo '<li>'.$achievement.'</li>'; 
     } 

     echo '<ul>'; 
    else: 

     // "no rows found" optional message 
     echo '<p><em>No data…</em></p>'; 

    endif; 
} 

Der Code wird in der Datei function.php Ihres aktiven untergeordneten Themas (oder Themas) oder auch in eine beliebige Plugin-Datei geschrieben.

geprüft und Arbeiten ...


Ursprüngliche Antwort:

Mit Advanced Custom Field Pro Plugin die Repeater Unterfelder Daten zu erhalten, müssen Sie the documented way, Funktionen und Methoden verwenden have_rows() und get_sub_field(), auf diese Weise:

function dl_custom_designer_tab() { 
    global $post; 

    $designer = get_field('designer'); 

    echo '<p>'.$designer['designer_image'].'</p>'; 
    echo '<p>'.$designer['designer_name'].'</p>'; 
    echo '<p>'.$designer['designer_short_description'].'</p>'; 

    // check if the repeater field has rows of data 
    if(have_rows('designer_achievements')): 
     echo '<ul>'; 
     // loop through the rows of data 
     while (have_rows('designer_achievements')) : the_row(); 
      // display a sub field value 
      echo '<li>' . get_sub_field('achievement') . '</li>'; 
     endwhile; 

     echo '<ul>'; 
    else: 

     // "no rows found" optional message 
     echo '<p><em>No row founds in repeater…</em></p>'; 

    endif; 
} 
+0

Bereits versucht, dass man. Und immer noch nicht funktioniert. Es zeigt nur das else echo anstelle der Zeilen mit Inhalt. Anyways danke für die Hilfe und hier ist der Screenshot, wie ich die Felder erstellt habe. https://ibb.co/mGzvv6 –

+0

@JohnAshleyNohay Ich fand einen funktionierenden Weg ... Ich habe Ihr Problem auch selbst reproduziert, und ich denke, das ist ein Fehler im Plugin in Bezug auf Produkt Post-Typ und Repeater-Funktion in ACF Pro. Ich habe meine Antwort mit einer funktionierenden Alternative aktualisiert ... Probieren Sie es aus und lassen Sie es mich wissen. Vielen Dank – LoicTheAztec

Verwandte Themen