サポート » 使い方全般 » 記事中の任意の場所に、ウィジェットを追加をしたい

  • 解決済 mame777

    (@mame777)


    記事中の任意の場所に、ウィジェットを追加をしたいです。
    ウィジェットを表示することはできたのですが、任意の場所にだすことができません。
    こちらの方法が1番わかりやすそうだったので、
    基本的にそのまんま利用させてもらいました。
    http://a-zumi.net/post-967/

    ただ、私の環境だと、番号を変えても、うまく位置を変更できず、
    カスタマイズ方法も調べたのですが、よくわからなかったため、
    質問させてもらいます。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • こんにちは、

    参照先のコードが間違っています。

    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

    トピック投稿者 mame777

    (@mame777)

    具体的に説明いただき、ありがとうございます。

    書いていただいたコードで動作確認を取ることができました。
    ただ、説明不足で申し訳ございません。

    何かそれっぽいプラグインをどこかで見たことがあるのですが、任意の場所というのは、たとえば、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;
    }
    ?>

    いろいろ直しを入れたので、最後にもう一回コピーして、動作確認願います

    トピック投稿者 mame777

    (@mame777)

    たびたびありがとうございます。

    動作確認したのところ、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 )

    ですね、ごめんなさい。

    お手数ですが、解決済みでしたら、「解決済み」にしておいてください

    トピック投稿者 mame777

    (@mame777)

    いえいえ、とんでもございません。
    おかげさまでやりたいことができました。
    解決済みにします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「記事中の任意の場所に、ウィジェットを追加をしたい」には新たに返信することはできません。