hi all,
I am just trying to build my own customized wordpress tree menu, starting from the post where the user is and recursively querying the db via $wpdb to obtain a full category tree, until it reaches the top-level categories.
The question is this: it appears that every turn that i do in the cycle, the variable $treeContent ( or in the previous version, the array $theTree, appears to empty himself, despite I declare it out of the cycling function. Can somone explain me how I can solve this problem?
I had posted the code here It is thrown directly on the top of the sidebar.php file into my theme folder. Later I will build the complete plugin. Please have a look.
Many thanks,
Luca
------- START CODE EXCERPT --------
<?php
$theTree = array();
$treeContent = '';
function printContentNode($inputId) {
global $wpdb;
//$layerArray = array(); //creo array per il layer -- da appendere a $theTree;
$rowList = '';
//echo "elenco quelli sullo stesso livello<br />";
$rowList .= "<!--inizio giro: " . $inputId . "-->";
//query di selezione stesso livello -- stesso parent ($parentId);
$rows = $wpdb->get_results("
SELECT name AS catName,
term_taxonomy_id AS catId,
parent AS catParent
FROM wp_terms LEFT JOIN wp_term_taxonomy
ON wp_terms.term_id = wp_term_taxonomy.term_id
WHERE wp_term_taxonomy.parent = " . $inputId . "
;");
$subLayerArray = array();
foreach ($rows as $row) {
// doppio giro per estrarre gli item dagli oggetti
//che il metodo di wpdb crea di default;
foreach ($row as $rowKey => $rowItem) {
//echo " // rowItem (" . $rowKey . ") " . $rowItem;
$subLayerArray[$rowKey] = $rowItem;
}
/*
echo "<br /><br />subLayer: ";
print_r($subLayerArray);
echo "<br /><br />";
*/
$layerArray[] = $subLayerArray; // same as array_push();
$rowList .= '<li><a href="' . $_SERVER['PHP_SELF'] . '?cat=' . $subLayerArray['catId'] . '">' . $subLayerArray['catName'] . '</a></li>';
}
//echo "<br />";
$rowList = '<ul>' . $rowList . '</ul>';
return $rowList;
}
function printParentNode($inputId) {
global $wpdb;
//echo "estraggo il parente<br />";
$theParent = $wpdb->get_results("
SELECT name AS catName,
term_taxonomy_id AS catId,
parent AS catParent
FROM wp_terms LEFT JOIN wp_term_taxonomy
ON wp_terms.term_id = wp_term_taxonomy.term_id
WHERE wp_terms.term_id = " . $inputId . "
;");
/*
print_r($theParent);
echo "<br /><br />";
*/
//$newParentId = $theParent[0]->catParent;
//$layerArray["mainParent"] = $theParent[0]->catName;
/*
echo "<br /><br />layer(" . $parentId . "): ";
print_r($layerArray);
echo "<br /><br />";
array_unshift($theTree, $layerArray);
*/
$subArray = array();
foreach ($theParent[0] as $theKey => $theItem) {
$subArray[$theKey] = $theItem;
}
return $subArray;
}
function printLayer($parentId) {
global $wpdb; // fix al problema dell'oggetto non trovato
//vedi link -> http://wordpress.org/support/topic/240236
$levelOutput = printContentNode($parentId);
echo "pre: " . $treeContent . "<br />";
$treeContent = $levelOutput . $treeContent;
echo "all: " . $treeContent;
//echo '<ul>' . $rowList . '</ul>';
//echo "<!--fine giro: " . $parentId . "-->";
if ($parentId != 0) { // ricorsiva;
$levelParent = printParentNode($parentId);
print_r($levelParent);
echo "theP: " . $levelParent['catParent'].'<br />';
printLayer($levelParent['catParent']);
} else { // arrivato a livello zero;
/*
echo "<br /><br />layer(" . $parentId . "): ";
print_r($layerArray);
echo "<br /><br />";
array_unshift($theTree, $layerArray);
*/
}
}
if (is_category() || is_single()) {
echo "cat caso 1<br />";
$myCats = get_the_category();
} else {
echo "cat caso 2<br />";
$myCats = get_the_category(0);
}
if (count($myCats) == 1) {
$curCat = $myCats[0];
echo "categoria parente singola (" . $curCat->name . " :: " . $curCat->parent . ")<br />";
print_r($curCat);
echo "<br />";
//echo "<br /> / " . $curCat->parent . " / <br />";
printLayer($curCat->parent);//primo giro di lancio, poi ricorsiva;
//$result .= '<ul class ="custom_menu">';
//$result .= $treeContent;
//$result .= '</ul>';
} else {
echo "errore! questo post ha piu parenti";
}
?>
-------- END CODE EXCERPT --------