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_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

于 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()ため、これをフックすることはできません。

すべてのワードプレス フックのリストは次のとおりです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 に答える