get_permalink() always returns empty

I suddenly have a bug in my plugin, and I don’t know what on earth could be causing it. This code is failing because get_permalink() is returning empty at all times:

$select = "SELECT * FROM `".DB_NAME."`.`wp_posts` WHERE `post_status` = 'publish'";
$result = mysql_query($select);
while($meta_posts = mysql_fetch_array($result, MYSQL_ASSOC) ){
    $menu .= "<option value="".get_permalink($meta_posts['ID'])."">".$meta_posts['post_title']."</option>n";
}

It used to work just fine, all it does is return a dropdown menu of all the published WP posts/pages. Now I get the dropdown full of titles, but there is no permalink in the option value.

Read More

Anyone have any ideas why get_permalink() would be empty? I’ve even tried hardcoding a known postid into it, and it’s still empty.

Related posts

Leave a Reply

2 comments

  1. First off, you should use get_posts instead of a raw SQL query. Or at least use $wpdb.

    <?php
    $posts = get_posts(
        array(
            'post_status' => 'publish'
            'numberposts' => -1
        )
    );
    

    Then, try passing the entire post object to get_permalink, which saves some database queries.

    <?php
    foreach( $posts as $p )
    {
        $link = get_permalink( $p );
        // do stuff here...
    }
    

    The only thing I saw in get_permalink that might cause an empty string it it checking for an empty post ID. Try the above, and see if it works for what you need.

  2. Try this:

    query_posts( 'post_status=publish&posts_per_page=-1' );
    
    while ( have_posts() ) : the_post();
        $menu .= "<option value="".get_permalink(get_the_ID())."">".get_the_title()."</option>n";
    endwhile;