Собственные меню в wordpress


Особое место на любом сайте занимают меню. В wordpress конечно есть функционал для вывода меню, но такие меню выводятся в виде списка. А вот как сделать меню элементы которого будут распределяться равномерно в определенной области? Очень просто это реализуется с помощью таблицы, в ячейки которой будут записываться ссылки на страницы сайта. Для удобства я написал функцию для вывода меню на базе таблицы:

/** * return list of the pages as table */
function show_main_menu_as_table($menuid = 'tablemenu') {

    global $wpdb;
    $query = "SELECT * FROM ".$wpdb->posts." where (post_type ='page') and (post_status='publish') ORDER BY ID ASC";
    $result = mysql_query($query);

    $num_rows = mysql_num_rows($result);

    $i = 1;

    $tablemenu = "<table id='{$menuid}'><tr>";
    while ($row = mysql_fetch_array($result)) {
        $title = $row['post_title'];
        $link = get_page_link($row['ID']);
		$sel_class = ($row['ID'] == $_GET['page_id']) ? 'sel_link' : 'not_sel_link';
        $tablemenu = $tablemenu. "<td><a class='{$sel_class}' href={$link}>$title</a></td>";
        $i++;
    }
    $tablemenu = $tablemenu. '</tr></table>';
	echo $tablemenu;
}

Функция принимает один параметр - html атрибут id, а если он не указан - то этому атрибуту присваивается значение tablemenu. Такой подход позволяет стилизовать полученную таблицу на ваше усмотрение. Все что нужно - это скопировать код функции и поместить его в файл functions.php. Для вывода меню в определенном месте сайта вам необходимо вставлять код:

<?php show_main_menu_as_table(); ?>

либо:

<?php show_main_menu_as_table('myid'); ?>

Для того, чтобы создать меню, у которого атрибут id будет myid.

Это все на сегодня. Маленький, но полезный урок для экономии времени тем, кто ищет решения насущных проблем)

P. S. Подход можно модифицировать и использовать в качестве контейнеров для элементов не таблицу, а к примеру наборы блоков div или span. Тут уж вся фантазия вам в руки.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *