PHP Wordpress: mehrfache Dropdown Loops ... mit Ajax einblenden?

DjMG

Lieutenant
Registriert
Dez. 2006
Beiträge
621
Hallo!

Ich habe eine etwas spezielle Frage zu Wordpress/PHP.

Zur Lage: Ich möchte ein Dropdown-Feld, das mit dem Titel bestimmter Posts gefüllt ist, erstellen.
Die Posts, die hergenommen werden sollen, definiere ich mittels $args, also ganz klassisch.
Der Standardloop schaut so aus und funktioniert einwandfrei:

PHP:
<form action="<? bloginfo('url'); ?>" method="get">
<select name="post_id" id="post_id">
	
<?php
$args = array(
   'numberposts' => -1,
   'post_type' => 'sp_calendar',
);
					
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {					
   while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
      <option value="<?php the_ID(); ?>"><?php echo get_the_title() ;?></option>
   <?php endwhile; ?>
<?php
} wp_reset_query();
?>

</select>
</form>

Ich möchte nun, wenn jemand im Dropdown einen Wert gewählt hat, mittels AJAX ein weiteres Dropdown anzeigen lassen. Der gewählte Wert soll aber Einfluss auf das nächste Dropdown haben.

Ein Beispiel: Man hat ein erstes Dropdown mit Bundesländern. Dort wähle ich "Hessen". Der zweite Loop muss also die Argumente haben:

PHP:
$args = array(
   'numberposts' => -1,
   'post_type' => 'sp_calendar',
   'meta_key' => 'bundesland',
   'meta_value' => 'hessen',
);
// LOOP
// zeigt dann Städte in Hessen an, usw...

Wie bekomme ich das hin, dass diese zweite <form> entsprechend nachgeladen wird?
Leider etwas schwierig ausgedrückt, ich weiß, aber vielleicht kann jemand damit was anfangen :)

Vielen Dank für eure Hilfe & Tipps!
 
Vielleicht ein weiteres Skript anlegen.
Diesem uebergibst du dann per Ajax den Wert "Hessen" und es spuckt die Staedte aus.
Per JavaScript legst du dann das naechste Dropdown an.
 
Meine Programmierkenntnisse sind nicht ganz so gut, wie es vielleicht scheint :)
Hast du das vl. ein bisschen konkreter oder mittels Beispiel?

Wenn es zu schwierig würde, müsste ich das Formular abschicken (POST/GET) und normal weiterverarbeiten.
Aber auch dafür wäre eine Hilfe notwendig :)
 
So keonnte der Teil zum Anzeigen des Dropdowns aussehen.
Code:
<!DOCTYPE html>
<html>
<head>
  <title>Laender Dropdown</title>
  <meta charset="UTF-8" />
</head>
<body>

    <select name="land" id="land">
        <option value="">----</option>
        <option value="hessen">Hessen</option>
        <option value="nrw">Nordrhein Westphalen</option>
    </select>

    <select name="stadt" id="stadt"></select>

</body>

<!-- JQuery einbinden -->
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
<!-- JQuery code -->
<script type="text/javascript">

  // ausführen wenn seite geladen ist
  $(document).ready(function()
  {
    // Dropdown ausblenden
    $('#stadt').hide();
  });

  // Immer wenn das Land geaendert wird
  $('#land').change(function()
  {
    $('#stadt').hide();

    // Ausgewaehltes Land
    var land = $(this).val();

    $.ajax({
      url: "djmg_data.php?land=" + land,
      dataType: 'json'
    })
    .done(function(data)
    {
      if(data && data.length > 0)
      {
        // Optionen erstellen
        var staedte = '';
        for (var i = 0; i < data.length; i++) {
            staedte += '<option value="' + data[i] + '">' + data[i] + '</option>';
        };

        // Staedte hinzufuegen und Dropdown anzeigen
        $('#stadt').html(staedte).show();
      }
    });

  });

</script>
</html>

Und so koennte der Teil aussehen der die Staedte ausgibt.
PHP:
<?php
header('Content-Type: application/json');

if(isset($_GET['land']) && !empty($_GET['land']))
{
    $land = $_GET['land'];

    $args = array(
       'numberposts' => -1,
       'post_type' => 'sp_calendar',
       'meta_key' => 'bundesland',
       'meta_value' => $land,
    );

    // Hier die Daten mit WP holen und als JSON ausgeben.
    $staedte = ['asd', 'qweqwe', 'xcvbcxv'];
    echo json_encode($staedte);
}
else
{
    echo "[]";
}

Das ganze musst du jetzt natuerlich fuer WP anpassen. :)
 
Zurück
Oben