webForumDet fria alternativet

Visa kategorier Wordpress

PHP

7 svar · 1 412 visningar · startad av Akerlundh

Medlem sedan maj 20031 682 inlägg
Frågan#1

Jag vill att alla mina kategorier ska visas på detta sättet på en sida.

[toggle_content title=" Här ska huvud kategorin visas "]
Har ska underkategorierna till huvudkategorin ovan visas.
[/toggle_content]...osv

Kan ju skriva in koden förhand men då måste jag göra det för varje kategori. Då skulle t.ex. se ut så här men om jag lägger in en ny kategori måste jag skriva allt förhand.

[toggle_content title="<?php
$cat=3;
$yourcat = get_category($cat);
if ($yourcat) {
echo  $yourcat->name  ;
}
?>"]
<?php wp_list_categories('orderby=name&show_count=1&use_desc_for_title=0&child_of=3'); ?>
[/toggle_content]
Medlem sedan feb. 20034 441 inlägg
#2

Här är en bit på vägen.. Mer info finns på http://codex.wordpress.org/Function_Reference/get_categories.

$args = array();
foreach(get_categories( $args ) as $category){
	echo "	<h3>{$category->name}</h3>\n
			<div class=\"hidden\">";

	$args = array('child_of' => $category->cat_ID);
	foreach(get_categories( $args ) as $child){
		echo "<a href=\"#\" title="{$child->name}">{$child->name}</a><br />\n";
	}
	echo "</div><br />\n";
}

Se länken ovan, det kan räcka med en loop också (går att ställa in hurvida barnbarn ska visas etc..

Medlem sedan feb. 20034 441 inlägg
#3

Om du kör följande:

echo "<pre>";
print_r(get_cateogories());
echo "</pre>";

Så ser du vad som hämtas. Det finns en parameter som heter hierarchical så om rätt saker hämtas som en array, räcker det med en forloop, så kan du bara kolla varje "varv" om parent är 0 eller inte, för att avgöra vad som ska skrivas ut.

Medlem sedan maj 20031 682 inlägg
#4

MickeA.com skrev:

$args = array();
foreach(get_categories( $args ) as $category){
echo " <h3>{$category->name}</h3>\n
<div class=\"hidden\">";

$args = array('child_of' =\> $category-\>cat_ID);
foreach(get_categories( $args ) as $child){
    echo "\<a href=\\"#\\" title="{$child-\>name}"\>{$child-\>name}\</a\>\<br /\>\\n";
}
echo "\</div\>\<br /\>\\n";

}

Får felmeddelande när jag lägger in den koden.

Parse error: syntax error, unexpected '{', expecting ',' or ';' in /storage/content/51/191351/hv.fordonstjanster.se/public_html/wp-content/plugins/php-code-for-posts/PHPPostCode.php(85) : eval()'d code on line 9

Får även felmeddelande på den andra koden.

Fatal error:  Call to undefined function get_cateogories() in /storage/content/51/191351/hv.fordonstjanster.se/public_html/wp-content/plugins/php-code-for-posts/PHPPostCode.php(85) : eval()'d code on line 3
Medlem sedan maj 20031 682 inlägg
#5

Vet inte om det underlätta men tidigare har jag ju skrivit en shortcode som jag vill ha det i men den verkliga koden jag vill ha det i är denna.


<h4 class="slide_toggle"><a href="#">HUVUDKATEGORI</a></h4><div class="slide_toggle_content" style="display: none;">
UNDERKATEGORIER<br />
</div>
Medlem sedan maj 20031 682 inlägg
#6

Ändra vad jag skrev.....

I den första get_categories vill jag endast visa huvudkategorier inte "children" lyckas inte få någon kod att funka med det. Sen i "Children" kategorierna vill jag visa "show_count' => 1" så den visar hur många inlägg det finns i varje kategori, men får inte det att funka.


<?php

$args = array();
foreach(get_categories( $args ) as $category){
echo " <h4 class='slide_toggle'><a href='#'>{$category->name}</a></h4>\n<div class='slide_toggle_content' style='display: none;'>";

$args = array('child_of' => $category->cat_ID);
foreach(get_categories( $args ) as $child){
echo " - <a href=\"#\" title='{$child->name}'>{$child->name}</a><br />\n";
}
echo "</div>\n";
	
}

?>
Medlem sedan feb. 20034 441 inlägg
#7

För att skriva ut allt, föräldrar, barn och ev. barnbarn, måste du använda en rekursiv funktion:

function get_my_hierarchy($args = array()){
	$Sb = "<ul>";
	
	foreach(get_categories($args) as $category){
		$Sb .= "
			<li>
				<strong>{$category->name}</strong><br />
				<span>{$category->category_description}</span>\n
		";
		if(sizeof(get_categories(array('hide_empty' => 0, 'parent' => $category->cat_ID))) !== 0)
			$Sb .= get_my_hierarchy(array('hide_empty' => 0, 'parent' => $category->cat_ID));

		$Sb .= "</li>\n";
	}
	$Sb .= "</ul>\n";
	return $Sb;
}

Kalla på funktionen med:

<?php $args = array('hide_empty' => 0, 'parent' => 0);
 echo get_my_hierarchy($args);?>

Nu kommer det skrivs ut som en lista, enl. följande:

[B]Förälder 1[/B]
  - Barn 1-1
  - Barn 1-2
    - Barn 1-2-1
    - Barn 1-2-2
      - Barn 1-2-2-1

  - Barn 1-3
    - Barn 1-3-1

[B]Förälder 2[/B]
[B]Förälder 3[/B]
  - Barn 3-1
    - Barn 3-1-1

[B]Förälder 4[/B]

Vill du ha det som en funktion i en egen mall-fil, eller som en shortcode? Att ordna en shortcode (som även tar argument) är en barnlek.. Ev. att du måste tweaka argumenten för att få det som du vill. Eftersom jag inte hade nångra inlägg i mina kategorier så måste jag använda 'hide_empty' => 0 ovan, vill du dölja kategorier som inte har några inlägg, tar du bort hela argumentet, eftersom defaultvärdet är 1.

Medlem sedan maj 20031 682 inlägg
#8

Nu börjar det närma sig!

Två saker saknas. underkategorierna ska vara länkar till kategori sidan. Jag vill också att antal inlägg i underkategorierna ska räknas.

Men jag skulle vilja ha in denna koden

<h4 class="slide_toggle"><a href="#">HUVUDKATEGORI</a></h4><div class="slide_toggle_content" style="display: none;">

UNDERKATEGORIER<br />

</div>
257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)