2017-06-23 1 views
0

Ich benutze erweiterte benutzerdefinierte Felder, um einen interaktiven Lebenslauf auf meiner Portfolio-Website zu erstellen. Im Bereich Fähigkeiten habe ich drei Kategorien. Entwicklung, Design und Tools. Ich benutze ein Repeater-Custom-Feld auf jedem von diesen, um 4 Unterfelder zu übergeben, die Informationen über diese Fähigkeit enthalten.Ist es möglich, Wordpress/PHP-Abfrage-Schleifen einer benutzerdefinierten Funktion zuzuordnen, um Parameter ebenfalls zu übergeben?

Ich unterteile jede dieser Kategorien in 3 Repeater-Felder für das Ausfüllen im Admin-Bereich. Aber die drei Schleifen sind im Wesentlichen gleich. Sie sehen beide so aus.

<h3>Development:</h3> 
      <?php // check if the repeater field has rows of data 
       if(have_rows('development')): 

       // loop through the rows of data 
       while (have_rows('development')) : the_row(); 
       // display a sub field value inside a card 
       ?> 
       <?php 
       // VARIABLES // 
       $title = get_sub_field('title'); 
       $logo = get_sub_field('logo'); 
       $backImage = get_sub_field('background_image'); 
       $overlay = get_sub_field('overlay_gradient'); 
       $url = get_sub_field('url_link'); 
        // THE SKILL BLOCK // ?> 
        <figure class="skill-block" style="<?php echo $overlay ?>"> 
         <img class="back-image" src="<?php echo $backImage['url'] ?>"/> 
         <figcaption> 
          <div> 
           <img src="<?php echo $logo['url']?>"> 
           <h4><?php echo $title ?></h4> 
          </div> 
         </figcaption> 
         <a href="<?php echo $url;?>">View more</a> 
        </figure> 
       <?php endwhile; //end of while statement 
        endif; 
        ?> 
    <h3>Design</h3> 

    <?php // check if the repeater field has rows of data 
    if(have_rows('design')): 

     // loop through the rows of data 
     while (have_rows('design')) : the_row(); 
      // display a sub field value inside a card 
      ?> 
      <?php 
      // VARIABLES // 
      $title = get_sub_field('title'); 
      $logo = get_sub_field('logo'); 
      $backImage = get_sub_field('background_image'); 
      $overlay = get_sub_field('overlay_gradient'); 
      $url = get_sub_field('url_link'); 
      // THE SKILL BLOCK // ?> 
      <figure class="skill-block" style="<?php echo $overlay; ?>"> 
       <img class="back-image" src="<?php echo $backImage['url']; ?>"/> 
       <figcaption> 
        <div> 
         <img src="<?php echo $logo['url']; ?>"> 
         <h4> <?php echo $title; ?></h4> 
        </div> 
       </figcaption> 
       <a href="<?php echo $url;?>">View more</a> 
      </figure> 
     <?php endwhile; //end of while statement 
    endif; 
    ?> 

    <h3>Tools</h3> 

    <?php // check if the repeater field has rows of data 
    if(have_rows('tools')): 

     // loop through the rows of data 
     while (have_rows('tools')) : the_row(); 
      // display a sub field value inside a card 
      ?> 
      <?php 
      // VARIABLES // 
      $title = get_sub_field('title'); 
      $logo = get_sub_field('logo'); 
      $backImage = get_sub_field('background_image'); 
      $overlay = get_sub_field('overlay_gradient'); 
      $url = get_sub_field('url_link'); 
      // THE SKILL BLOCK // ?> 
      <figure class="skill-block" style="<?php echo $overlay ?>"> 
       <img class="back-image" src="<?php echo $backImage['url']; ?>"/> 
       <p>django <?php echo $backImage; ?></p> 
       <figcaption> 
        <div> 
         <img src="<?php echo $logo['url']; ?>"> 
         <h4><?php echo $title; ?></h4> 
        </div> 
       </figcaption> 
       <a href="<?php echo $url;?>">View more</a> 
      </figure> 
     <?php endwhile; //end of while statement 
    endif; 
    ?> 

Anstatt dieses Ding aus 3 mal zu schreiben, und dann, wenn ich die Struktur bearbeiten Um das zu ändern 3 mal machen zu müssen, ist es möglich, diese Schleifenstruktur auf irgendeine Art von Funktion zu speichern und dann übergeben Sie Parameter, Fülle den einzigen Teil aus, der sich ändert (der Teil, der den Namen des Top-Level-Feldes angibt, wie "Entwicklung" oder "Design" oder "Werkzeuge". Irgendwelche Gedanken? Ich bin neu in Programmierung und PHP espc, aber ich versuche es DRY Schreibfähigkeiten in meine Gewohnheiten zu integrieren.

Antwort

1

Wie wäre das?

<?php 
    $skills = array('development', 'design', 'tools'); 

    foreach ($skills as $skill) : 
?> 
    <h3><?php echo ucfirst($skill); ?>:</h3> 
    <?php // check if the repeater field has rows of data 
     if(have_rows($skill)): 

     // loop through the rows of data 
     while (have_rows($skill)) : the_row(); 
     // display a sub field value inside a card 
    ?> 
    <?php 
     // VARIABLES // 
     $title = get_sub_field('title'); 
     $logo = get_sub_field('logo'); 
     $backImage = get_sub_field('background_image'); 
     $overlay = get_sub_field('overlay_gradient'); 
     $url = get_sub_field('url_link'); 
    ?> 
     <figure class="skill-block" style="<?php echo $overlay ?>"> 
      <img class="back-image" src="<?php echo $backImage['url'] ?>"/> 
      <figcaption> 
       <div> 
        <img src="<?php echo $logo['url']?>"> 
        <h4><?php echo $title ?></h4> 
       </div> 
      </figcaption> 
      <a href="<?php echo $url;?>">View more</a> 
     </figure> 
    <?php 
     endwhile; //end of while statement 
     endif; 
    endforeach; 
?> 
+0

Das funktioniert, aber ich fand es wirklich einfacher, nur es Funktion Fähigkeiten ($ Abschnitt) machen {all PHP-Struktur Schleife hier mit dem while-Schleife in geben $ Schnitt} Es ist zumindest für mich einfacher, obwohl zu lesen Ich weiß nicht, ob es so trocken wie möglich ist. –

+0

Ich habe die Struktur Ihrer Funktion nicht vollständig verstanden, aber ich denke, es wird immer noch mindestens PHP Code wiederholen, wenn nicht HTML Markup. Aber geh mit dem, was dir leicht fällt. – Junaid

0

Also habe ich es ausprobiert und es funktioniert! Ich konnte keine Antwort direkt im Internet finden, da es sich auf PHP bezieht, weshalb ich hier gefragt habe, aber das ist es, was ich aus meiner JavaScript-Klasse heraus ausprobiert habe.

function skillz($section) { 

       if(have_rows($section)): 

        // loop through the rows of data 
        while (have_rows($section)) : the_row(); 
         // display a sub field value inside a card 
         ?> 
         <?php 
         // VARIABLES // 
         $title = get_sub_field('title'); 
         $logo = get_sub_field('logo'); 
         $backImage = get_sub_field('background_image'); 
         $overlay = get_sub_field('overlay_gradient'); 
         $url = get_sub_field('url_link'); 
         // THE SKILL BLOCK // ?> 
         <figure class="skill-block" style="<?php echo $overlay ?>"> 
          <img class="back-image" src="<?php echo $backImage['url'] ?>"/> 
          <figcaption> 
           <div> 
            <img src="<?php echo $logo['url']?>"> 
            <h4><?php echo $title ?></h4> 
           </div> 
          </figcaption> 
          <a href="<?php echo $url;?>">View more</a> 
         </figure> 
        <?php endwhile; //end of while statement 
       endif; 

}; 

<h2>Skills:</h2> 
     <h3>Development:</h3> 
      <?php skillz(development); ?> 

     <h3>Design</h3> 
      <?php skillz(design); ?> 

     <h3>Tools</h3> 
      <?php skillz(tools); ?> 
+0

"Skillz", ernsthaft? Auch die Art, wie Sie die Funktion aufrufen, löst einen Fehler aus. Sollte 'skillz ('Entwicklung') sein;' * und das ist kein guter Ansatz. Wenn Sie meinen obigen Code verwenden, können Sie alle Wiederholungen vernachlässigen und einen nahtlosen Codefluss haben. – Junaid

+0

Entschuldigung! Niemand wird meinen Code sehen, manchmal mache ich Dinge, um mich zu unterhalten. Danke auch für die Korrektur der einzelnen Anführungszeichen. Ich war mir nicht sicher, ob ich das brauchte oder nicht. Es hat keinen Fehler geworfen, aber das ist wahrscheinlich nur mein Backend, großzügig und ich muss es mir angewöhnen, es richtig zu machen. –

+0

Es wurde kein Fehler ausgegeben, weil WP_DEBUG möglicherweise auf "false" gesetzt ist. Aktivieren Sie WP_DEBUG in der Entwicklungsumgebung. – Junaid

Verwandte Themen