在插件中设置页面标题,但不能在我的插件之外

时间:2020-03-02 作者:Dave Wilcox

我正在编写我的第一个简易插件,它从一个简单的数据库中获取项目。为了更好的SEO,我想将HTML标题设置为项目名称,根据用户的选择而有所不同。

我的用户在表单上输入一些选项,然后我显示结果。每个项目都有一个页面,URL为我提供?item=12345 因此,我可以从数据库中获取项目名称。所有这些都有效。

我可以通过在我的顶部(“引导程序”)中设置它来成功设置标题我的插件文件:

add_filter( \'pre_get_document_title\', \'dwnz_filter_pagetitle\', 20 );
调用my函数(在数据库中查询项目名称)。

我的问题是:这个过滤器是通过整个网站调用的,而不仅仅是在使用我的插件时。如何将此调用仅限于我的插件页面?

1 个回复
SO网友:Dave Wilcox

1) 我想我解决了:检查内容是否包含我的短代码:

a) 因此,在我的顶部(外部)插件文件中设置:

添加过滤器(“pre\\u get\\u document\\u title”、“dwnz\\u filter\\u pagetitle”,20);

b) 之后在同一文件中添加:

函数dwnz\\u filter\\u pagetitle($title){//get\\u post甚至在我需要一个页面而不是一个post时起作用
$content=get\\u post();
if(has\\u shortcode($content->post\\u content,\'my\\u plugin\\u shortcode\')){

   $new_page_title =  get_something_from_my_database();      
   $page_title = $new_page_title;
   return ($page_title);
}
}

2) 另外:我解决了一个类似的问题:如何确保我的JS只为我的插件内容排队(而我让它在所有输出上排队,这是不必要的)

a) 因此,在我的顶部(外部)插件文件中设置:

添加\\u shortcode(\'my\\u plugin\\u shortcode\',\'my\\u top\\u function\');

b) 在同一文件中:

function my_top_function($atts, $content = \'\', $tag){
   $obj = new my_plugin_class (\'my_title\', \'my_version\');
   $html = $obj->some_method();
   return ($html);

}
c)在my\\u plugin\\u类中,在某些方法中,首先根据您的输入和逻辑创建my\\u html和JS标记。(我正在从数据库中提取一些标记位置的google JS)。然后,我排队等待一行对Google的正常引用,再加上另一行将我的动态JS附加到WP队列,以便WP以符合标准的方式发布它。关键是,只有当您的短代码调用了顶部的代码时,才会发生所有这些情况。

$google_api_key = $this->get_google_api_key();
$google_include = \'https://maps.googleapis.com/maps/api/js?\'
   . \'v=3.exp&key=\'.$google_api_key;
$script_id = $this->plugin_name.\'_googlemaps\';
wp_enqueue_script( $script_id,  
   $google_include, 
   array( \'jquery\' ), $this->version, true );
wp_add_inline_script($script_id, 
   $my_dynamic_js_string, \'after\' ); 

....
return($my_html);
我希望这有帮助。我不熟悉这里的礼仪。

相关推荐

为内置钩子调用do_action和Apply_Filters是否安全?

我正在开发一个插件,它需要复制一些内置的WordPress逻辑。(此逻辑不能用任何内置方法调用,也不能独立连接到。)在这个动作序列中,WordPress的正常行为是调用动作挂钩(do_action(\'wp_login\', ...)) 和过滤器挂钩(apply_filters(\'login_redirect\', ...)).如果在对应于在Core中调用它们的时间点调用它们,那么直接从我的插件调用这些内置钩子是否安全(并且是可以接受的做法)?或者,其他与此相关的开发人员期望在非常特定的时间执行操作的风