ethercreative / seo

SEO utilities including a unique field type, sitemap & redirect manager
MIT License
266 stars 97 forks source link

Entry title not being used for SEO page title #479

Open andrewhawkes opened 2 months ago

andrewhawkes commented 2 months ago

Description

In the settings I have the default settings to use the entry title and site name:

image

When creating a new entry, the title does not get used from the entry:

image

I noticed this started happening after upgrading from v5.0.0-rc1

Steps to reproduce

  1. Add a new entry which has the SEO field
  2. The title of the entry is not used in the SEO title

Additional info

scoch5 commented 2 months ago

Hi, i have the same problem!

pascalminator commented 2 months ago

Can confirm I have the same exact problem on two different sites running Craft 5.

jasonlav commented 2 months ago

Changing it to {{ title }} to match {{ siteName }} does not appear to resolve the issue. Nor does {{ entry.title }}.

jasonlav commented 2 months ago

After further investigation, it appears there are multiple issues contributing to the problem.

  1. The _getVariables method in SeoData.php only adds custom fields to the $variables array that compiles the title template. Adding the following snippet appends all native attributes of the entry to the $variables array.
foreach ($this->_element->attributes() as $attribute) {
  $variables[$attribute] = $this->_element->{$attribute};
}

However, it probably isn't the best practice to do this since there could easily be naming conflicts. Rather, it would be better to add element as a new attribute of the $variables array. The title token would then be {{ element.title }}.

if (!array_key_exists('element', $variables) && $this->_element)
  $variables['element'] = $this->_element;
  1. The _renderObjectTemplate method in SeoData.php doesn't appear to be accepting the variables passed in. I ended up changing:
    $str = Craft::$app->view->renderObjectTemplate($template, $object);

To:

$str = Craft::$app->view->renderObjectTemplate($template, [], $object);

In my testing these changes work. However, I'm not familiar enough with Craft's Element model and renderObjectTemplate to recommend this solution, otherwise I would submit a pull request. Perhaps the maintainer of the plugin can weigh in.

pascalminator commented 1 month ago

This problem is fixed now with v5.0.0-rc3. Thank you @Tam

ryanfoote commented 1 month ago

I think I have this same issue with v4.2.2 of the plugin. Has anyone else running the same version run into this error?