@ গোল্ডেন্যাপলস: আপনার ওয়াকার ক্লাস কাজ করে না। তবে ধারণাটি সত্যিই ভাল। আমি আপনার ধারণার ভিত্তিতে একটি ওয়াকার তৈরি করেছি:
class Selective_Walker extends Walker_Nav_Menu
{
function walk( $elements, $max_depth) {
$args = array_slice(func_get_args(), 2);
$output = '';
if ($max_depth < -1) //invalid parameter
return $output;
if (empty($elements)) //nothing to walk
return $output;
$id_field = $this->db_fields['id'];
$parent_field = $this->db_fields['parent'];
// flat display
if ( -1 == $max_depth ) {
$empty_array = array();
foreach ( $elements as $e )
$this->display_element( $e, $empty_array, 1, 0, $args, $output );
return $output;
}
/*
* need to display in hierarchical order
* separate elements into two buckets: top level and children elements
* children_elements is two dimensional array, eg.
* children_elements[10][] contains all sub-elements whose parent is 10.
*/
$top_level_elements = array();
$children_elements = array();
foreach ( $elements as $e) {
if ( 0 == $e->$parent_field )
$top_level_elements[] = $e;
else
$children_elements[ $e->$parent_field ][] = $e;
}
/*
* when none of the elements is top level
* assume the first one must be root of the sub elements
*/
if ( empty($top_level_elements) ) {
$first = array_slice( $elements, 0, 1 );
$root = $first[0];
$top_level_elements = array();
$children_elements = array();
foreach ( $elements as $e) {
if ( $root->$parent_field == $e->$parent_field )
$top_level_elements[] = $e;
else
$children_elements[ $e->$parent_field ][] = $e;
}
}
$current_element_markers = array( 'current-menu-item', 'current-menu-parent', 'current-menu-ancestor' ); //added by continent7
foreach ( $top_level_elements as $e ){ //changed by continent7
// descend only on current tree
$descend_test = array_intersect( $current_element_markers, $e->classes );
if ( !empty( $descend_test ) )
$this->display_element( $e, $children_elements, 2, 0, $args, $output );
}
/*
* if we are displaying all levels, and remaining children_elements is not empty,
* then we got orphans, which should be displayed regardless
*/
/* removed by continent7
if ( ( $max_depth == 0 ) && count( $children_elements ) > 0 ) {
$empty_array = array();
foreach ( $children_elements as $orphans )
foreach( $orphans as $op )
$this->display_element( $op, $empty_array, 1, 0, $args, $output );
}
*/
return $output;
}
}
এখন আপনি ব্যবহার করতে পারেন:
<?php wp_nav_menu(
array(
'theme_location'=>'test',
'walker'=>new Selective_Walker() )
); ?>
আউটপুটটি বর্তমানের মূল উপাদান ধারণকারী একটি তালিকা এবং এটি শিশুরা (তাদের সন্তান নয়)। Def: রুট উপাদান: = শীর্ষ পৃষ্ঠার মেনু আইটেম যা বর্তমান পৃষ্ঠার সাথে সম্পর্কিত বা একটি বর্তমান পৃষ্ঠার পিতামাতা বা পিতামাতার একজন ...
এটি মূল প্রশ্নের সঠিক উত্তর দেয় না তবে প্রায়, যেহেতু এখনও শীর্ষ স্তরের আইটেম রয়েছে। এটি আমার পক্ষে ঠিক আছে, কারণ আমি সাইডবারের শিরোনাম হিসাবে শীর্ষ স্তরের উপাদানটি চাই। আপনি যদি এ থেকে পরিত্রাণ পেতে চান তবে আপনাকে প্রদর্শন_ এলিমেন্টকে ওভাররাইড করতে হতে পারে বা একটি HTML-পার্সার ব্যবহার করতে হবে।