Wordpress从短代码回调中附加到HEAD

Bil*_*oon 6 html php wordpress

我正在制作一个插件,注册一个短代码,当这样使用时:[append_css mycss]它会查找一个自定义字段mycss,并将内容添加到head文档中.一切都很好,除了代码被添加到正文中,我不知道如何将它添加到头部.

我已经尝试添加一个动作,wp_head但我不知道如何在执行此操作时传递变量,并且它似乎无法在短代码回调中触发.

function append_css_short($params){
  global $post;
  if(sizeof($params)){
    $key = $params[0];
  } else {
    $key = 'css';
  }
  return '<style type="text/css">'.
  get_post_meta($post->ID, $key, true)
  .'</style>';
}
add_shortcode('append_css','append_css_short');
Run Code Online (Sandbox Code Playgroud)

我怎么能把它写到头部而不是身体?有没有更好的方法来解决这个问题?

Jro*_*rod 4

如果你想在文档的头部打印一些东西,你需要使用add_action钩子wp_head

更好的方法可能是根本不使用短代码。短代码旨在添加内容或修改内容。相反,创建一个可以附加的函数来wp_head打印您的 css。您可能希望强制用户保持自定义字段名称一致。或者更好的是让你的插件在帖子中添加一个元框,他们可以在其中输入自定义 CSS。那么您将始终确定该字段的名称。

function append_css() {

   global $post;

   if ( ! get_post_meta( $post->ID, 'mypluginname_css', true ) ) {
      return;
   }

   return '<style type="text/css">'. get_post_meta($post->ID, $key, true) .'</style>';

}

add_action( 'wp_head', 'append_css' );
Run Code Online (Sandbox Code Playgroud)

我唯一不确定的是$post自定义字段数据是否在循环外可用。因此,您可能需要在其中添加一些额外的查询,以在触发时提取自定义数据wp_head