6

我正在制作一个插件来注册一个简码,当这样使用它时:[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');

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

4

3 回答 3

4

如果你想在文档的头部打印一些东西,你需要使用add_actionhook 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触发时提取自定义数据。

于 2013-02-01T16:13:23.943 回答
1

对@Jrod 提供的答案进行了一些小的调整,这是完整的工作插件,用法如下:

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

代码

<?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' );

?>
于 2013-02-01T16:46:31.767 回答
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>
于 2013-02-01T15:40:25.433 回答