将存储变量传递给ADD_FILTER

时间:2016-04-22 作者:flomei

我在一个网站上工作,页面标题是从外部数据源动态生成的。所以很明显,Yoast SEO/WordPress SEO在输出OpenGraph标签等时,根本不知道头部的正确标题、描述、图像等。

到目前为止,这应该没有问题,因为WordPress SEO支持过滤器连接到输出中。你可以在this list.

过滤器必须进入functions.php, 我需要将生成的数据传递给它,然后挂钩将发挥其魔力。因为我不能在中使用变量add_filter() 我需要一些办法。

我已经在使用this technique described by toscho 将数据保存在静态变量中,以便我可以从整个WordPress访问它们。(除我的过滤器外,这一切都很好。)

所以我的页面模板正在调用

$saved = title_storage($event_title);
将动态生成的页面标题保存到静态变量中以供以后使用。

在我的functions.php 我得到以下信息:

function seo_change_title( $string )
{
   $string = title_storage();
   return $string;
}
add_filter( \'wpseo_title\', \'seo_change_title\', 10, 1 );
显然,这是行不通的。这个title 从OpenGraph标签中删除,但这就是所有更改。虽然这可能意味着,我的变量是空的。

Trying to get my head around anonymous functions and searching WPSE for solutions, but I thought it could be this easy. Am I getting something wrong here?

2 个回复
SO网友:Z. Zlatev

最明显的原因可能是wpseo_title 过滤器在您保存标题之前启动。尝试移动title_storage() 调用早期阶段,如。这个wp 行动应该是一个很好的候选人。

SO网友:flomei

正如Zlatev所建议的那样,我尝试更早地获取数据,并更早地挂接到Yoast SEO插件。

这对我来说很好。必须编写三个新函数才能从外部数据源获取所需的数据,但现在我在设置标题、打开图形图像等方面不再有问题。

Lesson learned: Write (wrapper) functions to have your data ready, when you need it.

相关推荐

Set MySQL variables in WPDB

我有一个SQL查询,它可以很好地作为原始SQL查询工作,但是当我将其放入WPDB时,它会抛出一个错误:global $wpdb; $sql = "SET @product_group = (SELECT product_group FROM insert_temporary LIMIT 1); SELECT * FROM insert_temporary WHERE product_group in (SELECT product_group