Support » Plugins » Page slug as li id

  • Resolved Tdude


    I’m probably just plain stupid and there may be a better way:
    I hacked the 2.06 WP (template-functions-post.php) to get my page slugs (or id #) as css id’s. Now with 2.1 and new “walk” function code in classes.php, my head is spinning.
    Does anyone have a bright idea of how to do it? What I want to do is (yes I know you shouldn’t) replace the page link list with images via css.

    Relevant hacked code (from 2.06 template-functions.php around line 420):
    $tdude_page_slug = attribute_escape($cur_page['name']);

    and a few lines down:
    $output .= $indent . '<li class="' . $tdude_page_slug . '"><a href="' . get_page_link($page_id) . '" title="' . $title . '"><span>' . $title . '</span></a>';

    Note: I know there is a Text replacement plugin. I want my link text warped, so the plugin is no option.

    A last word: I want to thank all the contributors and writers of the documentation to this fantastic app! When I get better at it, I’d love to give something back.

Viewing 5 replies - 1 through 5 (of 5 total)
  • OK. Not a big deal. If you want your css li to show a slug as the id for each list item, change your wp-includes/classes.php somewhere around line 516 to something like this:
    // haxed by Tdude to give an id for the css
    // observe extra variable $post_name initiating function
    $output .= $indent . '<li class="' . $css_class . '" id="' . attribute_escape($page->post_name) . '"><a href="' . get_page_link($page->ID) . '" title="' . attribute_escape($page->post_title) . '"><span>' . $page->post_title . '</span></a>';

    It’s not a big hack codewise, just add a variable. The thing is I searched these forums for days (ok, nights) and didn’t find the answer.
    Remember, you can add several classes to an element, but only one id. That means using a numeric ID would probably be a better option. The site I’m using this for needs an understandable name in the css for li id’s and the corresponding background images, hence the hack. I know the sky will probably fall on my head using this with many javascript id’s in the plug-ins, but I’m using non-english slugs for the pages and li id’s, so I’ll probably be ok.

    Thanks, I needed to do this 🙂

    this is an excellent hack. it makes handling menu items much more flexible! cool cool cool..

    Moderator Samuel Wood (Otto)

    (@otto42) Admin

    Using ID’s for this is not a particularly good idea, since the call to list the pages can be made more than once on the page. Using a class would be better.

    So I would recommend changing line 510 to this:
    $css_class = 'page_item page_item_'.$page->ID;

    This will give you a page_item_number class on the item, where the number is the page’s ID. You can then use the class to style it via CSS.

    Additional: Added this to trac so that it might get included in a future version:

    Otto 42, you´re probably right. That’s why I stated the little fineprint on the last 6 rows of my post 😉
    Nevertheless, thanx for the ticket. I tend to think that somebody must have gotten the idea before me all the time…

Viewing 5 replies - 1 through 5 (of 5 total)
  • The topic ‘Page slug as li id’ is closed to new replies.