我正在创建一个插件,用于注册一个短代码,在使用时如下:[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');
我怎样才能把它写到头部而不是身体? 有没有更好的方法解决这个问题?
答案 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提供的答案稍作调整,这是完整的工作插件,用法如下:
append_css
(或append_js
)的自定义字段
<?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>