WP echo all sub_category IDs of of a category

Hallo zusammen, alle Links auf den ersten Seiten von Google sind nun als gelesen markiert und dennoch konnte ich nichts Genaues über mein Problem finden.

Ich benötige innerhalb einer while-Schleife (Wordpress), zum Filtern der Artikel, alle IDs von den Unter-Kategorien der Haupt-Kategorie 4, in der der Artikel vorkommt. (Einige Artikel gehören verschiedenen Kategorien an.)

Diese möchte ich mir innerhalb der class=„“ eins DIVs ausgeben lassen.

Folgendes liefert mir bereits eine Unter-Kategorie, aber leider nicht weitere (es gibt maximal 4):

[PHP]function return_subcategories() {
if ( has_category( ‚7‘ )) {
return „subcategory_7“;
} if ( has_category( ‚8‘ ))
return „subcategory_8“;
} if ( has_category( ‚6‘ )) {
return „subcategory_6“;
} if ( has_category( ‚9‘ )) {
return „subcategory_9“;
} else {
return „“;
}
} [/PHP]

Ausgabe:
[PHP]<?php echo return_subcategories(); ?>[/PHP]

Wie kann ich aber nun auch die anderen Unter-Kategorien ausgeben, in der sich der Artikel befindet?

Besten Dank für Eure Hilfestellung.

Returne in der Function nicht sofort eine Kategorie, sondern setze den Result-Wert zusammen.

Danke. Und wie könnte ich das bewerkstelligen?

In dem du die Grundlagen lernst!

http://php.net/manual/de/language.operators.string.php
oder
http://de1.php.net/manual/de/ref.array.php

Hallo,

generell würde ich - egal in welcher Programmiersprache - von diesen if else Konstrukten absehen. Für sowas wurde switch erfunden :wink:

http://php.net/manual/de/control-structures.switch.php

lg

Hallo mote,

wenn ich Dich richtig verstanden habe, dann sollte es (in etwa) so aussehen?

[PHP]<?php switch return_subcategories() { case (has_category('7'): echo "subcategory_7"; case (has_category('8'): echo "subcategory_8"; case (has_category('6'): echo "subcategory_6"; case (has_category('9'): echo "subcategory_9"; break; } ?>[/PHP]

Nee, ich denke if war da schon richtig wenn meine Birne nicht zu sehr Matsch ist. Weil die Funktion has_category(‚‘) liefert sicher nur ein true zurück. Deswegen ist switch in meinen Augen falsch. Schon allein weil du es eh falsch anwendest.

Das einfachste ist nur das du nicht immer return machst, denn wenn der return statt findest wird der ganze Code innerhalb der Funktion der nach dem Return kommt nicht mehr ausgeführt.

Du müsstest also jeden treffer in ein Array schreiben und ganz zum schluss das Array returnen.
Dann könntest du an besagter Stelle mit dem Array weiter arbeiten

Mit Arrays kenne ich mich leider noch nicht aus.

Besteht denn nicht die Möglichkeit mit IF gleich mehrere Werte abzufragen? (Ich schreibe das Folgende mit Absicht nicht als Code.)

function return_subcategories() {
if ( $var = has_category( ‚7‘ und/oder ‚8‘ und/oder ‚6‘ und/oder ‚9‘ )) {
return $var;
}
}

Das führt hier aber nicht zum gewünschten Ziel.

Das solltest du dringend ändern, denn Arrays braucht man an allen Ecken.
[php]
function return_subcategories()
{
$result = array();

if ( has_category( ‚7‘ ))
$result = „subcategory_7“;

if ( has_category( ‚8‘ ))
$result = „subcategory_8“;

if ( has_category( ‚6‘ ))
$result = „subcategory_6“;

if ( has_category( ‚9‘ ))
$result = „subcategory_9“;

return $result;
}
[/php]

Hint: Für Iterationen verwendet man Schleifen statt Kontrollstrukturen.

@bdt600: Danke, das glaube ich Dir gern.

Woran liegt es, dass mir Dein Code beim abrufen des Arrays mit:

[PHP]<?php echo return_subcategories();?>[/PHP]

Nur den Wert „Array“ ausgibt?

Weil du ein Array aus der Funktion geliefert bekommst.

Lerne die Grundlagen, alles andere macht keinen Sinn.

Weil du Arrays nicht mit Echo ausgeben kannst, ausgeben lassen kannst du es mit print_r($array). Aber das dient eher zum debuggen.

Du müsstest nun sowas machen

[PHP]
$array = return_subcategories();
foreach($array as $value) {
echo $value;
}
[/PHP]

Aber wie bdt600 sagt, lerne die Grundlagen. Die solltest du recht schnell erlernt haben. Man muss halt nur etwas in die Doku schauen.

[php]
$array = return_subcategories();
if (count($array))
echo implode(’ ', $array);
[/php]

Super! So funktioniert es. Ich werde nun anhand des Beispiels einmal die Doku durchgehen und dieses sicherlich dann auch nachvollziehen können. Danke.