Russ Bradberry
Russ Bradberry

Reputation: 10865

How do I concatenate a string in a PHP Array Element?

I am customizing wordpress blog and I have a need to make custom sidebar widgets. My PHP is rusty at best. What I am trying to do is concatenate a php variable into a string being set as an array element. here is the code I am using, it doesn't seem to work. All it does is print the stylesheet directory at the top of every page:

if ( function_exists("register_sidebar") )
    register_sidebar(array(
        "before_widget" => "<div class=\"rounded_box\"><div class=\"top_curve\"><img src=\"".bloginfo('stylesheet_directory')."/images/top_curve.jpg\" alt=\"Top\" width=\"247\" height=\"9\" /></div><div class=\"middle\">",
        "after_widget" => "</div><div class=\"bottom_curve\"><img src=\"".bloginfo('stylesheet_directory')."/images/bottom_curve.jpg\" alt=\"Bottom\"  /></div></div>",
        "before_title" => "<h2>",
        "after_title" => "</h2>",
    ));

so as you can see here I am trying to concatenate the bloginfo('stylesheet_directory') into 2 of the elements. This doesn't work properly. It just ends up printing it at the top of the page before the doctype.

Upvotes: 1

Views: 1515

Answers (4)

cwallenpoole
cwallenpoole

Reputation: 82058

I know that this is not technically the answer to your question, but have you considered:

if ( function_exists("register_sidebar") )
    $ssheet_dir = bloginfo('stylesheet_directory');
    register_sidebar(array(
            "before_widget" => "<div class=\"rounded_box\"><div class=\"top_curve\"><img src=\"$ssheet_dir/images/top_curve.jpg\" alt=\"Top\" width=\"247\" height=\"9\" /></div><div class=\"middle\">",
            "after_widget" => "</div><div class=\"bottom_curve\"><img src=\"$ssheet_dir/images/bottom_curve.jpg\" alt=\"Bottom\"  /></div></div>",
            "before_title" => "<h2>",
            "after_title" => "</h2>",
    ));

It would be easier and faster -- it would only involve making the bloginfo function call once.

Upvotes: 0

Steven
Steven

Reputation: 19445

It looks like you have a comma at the end. It might be that. Remove it and test. I've also replace \" with a singe '.

UPDATE replaced bloginfo() with get_bloginfo().

if ( function_exists("register_sidebar") )
{
  $args =array(
  "before_widget" => "<div class='rounded_box'><div class='top_curve'><img src='".get_bloginfo('stylesheet_directory')."/images/top_curve.jpg' alt='Top' width='247' height='9' /></div><div class='middle'>",
  "after_widget" => "</div><div class='bottom_curve'><img src='".get_bloginfo('stylesheet_directory')."/images/bottom_curve.jpg' alt='Bottom' /></div></div>",
  "before_title" => "<h2>",
  "after_title" => "</h2>");'

  register_sidebar($args);
}

Upvotes: 0

Gordon
Gordon

Reputation: 317167

bloginfo('stylesheet_directory') will echo the stylesheet directory. When you declare the array, you are effectively writing to stdout. This is why it will show on top of the page. What you are looking for is get_bloginfo.

Upvotes: 3

bluebrother
bluebrother

Reputation: 8896

Use implode:

string implode  ( string $glue  , array $pieces  )
string implode ( array $pieces )

Join array elements with a glue string.

Upvotes: 0

Related Questions