こんにちは、
参照先のコードが間違っています。
add_action は、add_filterの間違い、
preg_replace_callback の数字は、limitなので、何回置換するかなので、場所を変更するものではありません。
私の環境だと、番号を変えても、
ので、誰がやってもうまく動きません
どんなウィジェットが表示したいのか、わからないのですが
同様のやり方であれば、以下のような書き方で動作するんじゃないかと思います。
投稿のウィジェットを表示したい場所に、<!--WP_Widget_Calendar-->
と正確なウィジェットの名前を書いてみてください
functions.php
<?php
add_filter( 'the_content', 'my_content_filter' );
function my_content_filter( $return_value ) {
$result = preg_replace_callback( '|<!--([^-]+)-->|', 'my_get_the_widget', $return_value, 1, $count );
if ( $count == 1 ) {
return $result;
}
return $return_value;
}
function my_get_the_widget( $matches ) {
//もう少しやるなら、$wp_widget_factory を調べてください
$names = array(
"WP_Widget_Archives",
"WP_Widget_Calendar",
"WP_Widget_Categories",
"WP_Widget_Links",
"WP_Widget_Meta",
"WP_Widget_Pages",
"WP_Widget_Recent_Comments",
"WP_Widget_Recent_Posts",
"WP_Widget_RSS",
"WP_Widget_Search",
"WP_Widget_Tag_Cloud"
);
if ( isset( $matches[1] ) && array_search( $names ) !== false ) {
ob_start();
the_widget( wp_kses($matches[1], array() ) );
$out = ob_get_clean();
}
return $out;
}
?>
詳しくは、以下を参照してください
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/the_widget
具体的に説明いただき、ありがとうございます。
書いていただいたコードで動作確認を取ることができました。
ただ、説明不足で申し訳ございません。
何かそれっぽいプラグインをどこかで見たことがあるのですが、任意の場所というのは、たとえば、pタグで2と指定すれば、2つ目のpタグの下にウィジェットが表示されるものを考えておりました。あと、記事数が多いため、ショートコードは使わず、一括で挿入できればよいと思っております。
このたびはこちらの説明不足で誠に申し訳ございません。
タグの数をカウントして位置を移動するような関数はありますでしょうか。
それとも、この場合、正規表現の置換方法になってくるのでしょうか。
こんな感じでしょうか?
<?php
add_filter( 'the_content', 'my_content_filter', 11 );
function my_content_filter( $return_value ) {
$num_p = 3;//段落数
$return_array = explode( '</p>', trim( $return_value ) );
$result = '';
foreach( $return_array as $key => $val ) {
if( $key + 1 == $num_p && !empty( $val ) ) { // 段落数調整
$result .= $val.'</p><!--WP_Widget_Calendar-->';//置換ウィジェット指定
}else{
$result .= $val.'</p>';
}
}
$result = preg_replace_callback( '|<!--([^-]+)-->|', 'my_get_the_widget', $result, 1, $count );
if ( $count == 1 ) {
return $result;
}
return $return_value;
}
function my_get_the_widget( $matches ) {
$names = array(
"WP_Widget_Archives",
"WP_Widget_Calendar",
"WP_Widget_Categories",
"WP_Widget_Links",
"WP_Widget_Meta",
"WP_Widget_Pages",
"WP_Widget_Recent_Comments",
"WP_Widget_Recent_Posts",
"WP_Widget_RSS",
"WP_Widget_Search",
"WP_Widget_Tag_Cloud"
);
if ( isset( $matches[1] ) && array_search( $names ) !== false ) {
ob_start();
the_widget( wp_kses($matches[1], array() ) );
$out = ob_get_clean();
}
return $out;
}
?>
いろいろ直しを入れたので、最後にもう一回コピーして、動作確認願います
たびたびありがとうございます。
動作確認したのところ、Warningが表示されるようです。。
Warning: array_search() expects at least 2 parameters, 1 given in
ただ、なんとかできましたので、大丈夫です。
http://jp1.php.net/manual/ja/function.array-search.php
このたびは本当にありがとうございました。
array_search( $matches[1], $names )
ですね、ごめんなさい。
お手数ですが、解決済みでしたら、「解決済み」にしておいてください
いえいえ、とんでもございません。
おかげさまでやりたいことができました。
解決済みにします。