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

时间:2013-02-01 15:35:58

标签: php html 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');

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

3 个答案:

答案 0 :(得分: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' );

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

答案 1 :(得分:1)

对@Jrod提供的答案稍作调整,这是完整的工作插件,用法如下:

  1. 使用所需代码
  2. 创建名为append_css(或append_js)的自定义字段
  3. ...当然,没有数字2;)
  4. 代码

    <?php
    /**
     * @package Append_CSS_JS
     * @version 0.1
     */
    /*
    Plugin Name: Append CSS JS
    Plugin URI: http://itaccess.org/wordpress-plugins/append-css-js/
    Description: Append Css or Js to any page using Custom Fields
    Author: Billy Moon
    Version: 0.1
    Author URI: http://billy.itaccess.org/
    */
    
    function append_css() {
    
      global $post;
    
      if ( ! get_post_meta( $post->ID, 'append_css', true ) ){
        return;
      }
    
      echo '<style type="text/css">'. get_post_meta($post->ID, 'append_css', true) .'</style>';
    
    }
    
    add_action( 'wp_head', 'append_css' );
    
    function append_js() {
    
       global $post;
    
       if ( ! get_post_meta( $post->ID, 'append_js', true ) ) {
          return;
       }
    
       echo '<script type="text/javascript">'. get_post_meta($post->ID, 'append_js', true) .'</script>';
    
    }
    
    add_action( 'wp_head', 'append_js' );
    
    ?>
    

答案 2 :(得分:0)

我不认为这是可能的,因为短代码将在wp_head()之后调用,因此你无法挂钩。

以下是所有wordpress挂钩http://adambrown.info/p/wp_hooks

的列表

修改

这是一种解决方法:

在你的模板中:

<?php
//get the content of your post:
if(have_posts()) while(have_posts()) the_post();
    $pcontent = get_the_content();
endwhile;
?>
<html>
<head>
...
</head>
<body>
...
<?php echo $pcontent; ?>

</body>
</html>