• 解決済 gellgugu

    (@gellgugu)


    度々お世話になります。

    moreタグを使用し、一覧ページにはmoreタグ以前の記事を表示するようにしていますが、それぞれの記事ページのmoreタグ部分にカスタムメニューを挿入したいと思っています。
    プラグインで、moreタグ部分に広告を挿入する様なものがあるとの事ですが、広告の代わりにカスタムメニューを挿入したいのですが可能でしょうか?

    お分かりの方、よろしくお願いいたします。

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

    カスタムメニューというものが、いまいち理解できていないのですが、

    <!--more詳細はこちらですよ-->

    と書いていただくと、詳細はこちらですよ というカスタムテキストリンクが出来ると思います。

    トピック投稿者 gellgugu

    (@gellgugu)

    nobitaさん、ご返答ありがとうございます。
    また、分かりづらい質問をしてしまい申し訳ありませんでした。

    nobitaさんが仰っている部分はおそらく一覧ページの方ではないでしょうか?
    私が言いたかったのは各個別の記事ページの方です。

    絵を書いたらすぐにお伝えできるのですが、例えばWEBクリエイターボックスさんを見ていただくと分かるのですが、一覧ページから個別の記事ページへ行っていただくと、ちょうどmoreタグを挿入した部分に「WEBデザイナー転職なら、まずここで。」という広告があると思います。
    その部分に私の場合、カスタムメニューを挿入したいという事です。

    どうやらAdsenseなどの広告を挿入するプラグインはある様なのですが、その他何らかのコンテンツを挿入する様なものは見つからず、ググってもそういった記事はなかったものでこちらでご質問させていただきました。

    この辺りの事がお分かりでしたらよろしくお願いいたします。

    テーマのfunctions.phpに追加してみてください。

    装飾は、いろいろやってみてください。

    <?php
    
    add_filter( 'the_content','my_more_content');
    
    function my_more_content( $content ){
    
    	$html = '<p><a href="http://example.com">転職の事なら</a></p>';
    
    	if( preg_match( '!<span id="more-[0-9]+"></span>!',$content, $regs ) ){
    
    		$content = str_replace( $regs[0],$regs[0].$html, $content );
    	}
    
    	return $content;
    }
    ?>

    トピック投稿者 gellgugu

    (@gellgugu)

    nobitaさん、ありがとうございます。
    確かにバッチリ出来ました!

    ただ大変申し訳ないのですが、特定の固定ページでのみ有効に出来ないでしょうか?
    現状ですと、ブログ記事だけでなく全ての固定ページに投稿した場合にも有効になってしまいます。
    これを任意の固定ページで出来たらと思います。

    理想としては固定ページ内にコードを記述し、
    $html = '<p><a href="http://example.com">転職の事なら</a></p>';
    この部分に
    <?php wp_nav_menu( array( 'theme_location' => 'sumple' ) ); ?>
    を埋め込めばmoreタグ部分にカスタムメニューが表示される様になれば最高です。

    なかなかうまく伝えられなくて申し訳ありません。

    任意のページなら、ショートコードを使えばよい
    http://firegoby.jp/archives/4633

    トピック投稿者 gellgugu

    (@gellgugu)

    hissyさん、ご回答ありがとうございます。
    確かに、ショートコードで思う通りのことができました。
    こちら(kachibito.netさん)を参考にしました。

    また説明不足で申し訳ありません。
    今回やりたいことはまず固定ページの親ページがあり、その子ページが6ページあります。
    全て同じテンプレートを利用して作成し、そこに子ページのカスタムメニューを作成・挿入するというものです。

    そこで、テンプレートの構成として、まず最初に各ページのmoreタグまでの記事を置き、次にmoreタグ部分にカスタムメニューを、最後にmoreタグ以降の記事を置きたいのです。

    この構成を作るのに、ショートコードを利用すれば確かに思う通りのことができます。
    しかし、さらに子ページを追加することになった場合、毎回moreタグの下にショートコードを挿入しなければなりません。
    私自身が永久にホームページを管理するのなら良いのですが、このホームページは完成したら受け渡すことになりますのでなるべくならテンプレートに組み込んで、子ページを追加したときに同じテンプレートを指定するだけで同じ形にできるようにしたいというわけです。

    なかなか説明不足で大変申し訳ありませんが、お分かりでしたらよろしくお願いいたします。

    それなら親ページに子ページの一覧を表示するプラグイン(ショートコード)を使えば良いのでは?
    http://firegoby.jp/wp/child-pages-shortcode

    一覧を表示するのはショートコードですから、moreタグとか関係無く任意の所に挿入できますし。

    子ページを追加した時だけ、自動で親ページに一覧が表示されるようにしたければ、

    1. 固定ページかどうか判断。
    2. 子ページをもっているかどうか判断
    3. 子ページがある時だけ more タグの部分で do_shortcode

    でいいかと。

    と思ったけど、結局固定ページ作成時にmoreタグは手動で挿入しなければいけないので、手間ですよね。
    私なら同じ手間なら、子ページ一覧を表示させる専用のテンプレートを作っておいて、そのテンプレート内でthe_contentの後あたりにコードを書いておき、親ページにそのテンプレートを適用させておく、とするかな。

    どのみちmoreタグは入れないといけないので、かんたんにショートコードを入れられるプラグインを使ったらいいんじゃないでしょうかー
    http://wordpress.org/plugins/shortcoder/

    トピック投稿者 gellgugu

    (@gellgugu)

    gatespaceさん、hissyさん、ありがとうございます。
    取り急ぎはショートコードで対応しようと思います。

    ちなみに、gatespaceさん、親ページにのみ子ページの一覧を表示させるのではなく、親にも子にも一覧を表示したいと思っています。
    ですから親も子も同じテンプレートを使用し、そこに記述出来たらと思いました。

    ちなみに、別途親にのみ子ページのタイトルとmoreタグまでの記事の一覧表示もしたかったので、こちらの記事の2番目の投稿のコードを参考にしてみました。
    リンクの部分がまだ出来ていないのと、順序の変更が出来ていないので、こちらはこちらで悪戦苦闘しています。

    また、moreタグの挿入は「このボタンを押して」と、直感的な指示が出来るので良いですが、ショートコードの記入は「このボタンを押した後、[cmenu menu=”guide”]を記載して」と、簡単ではありますがキーボードを打つなりコピーするなりという手間を指示する事になりますので、出来ればmoreタグ挿入のボタンを押すだけで自動的にメニューが挿入されたら。。。という思いでした。

    プラグインも良いと思いますが、今度はプラグインの説明が必要になり、受け渡す方の覚える事が増えてしまいます。
    受け渡し先の方になるべく簡単に、使いやすいような形で思う様なサイトを作りたいと思っています。
    function.phpへの記載ではなくテンプレートへの記載によるカスタマイズはやはり難しいのでしょうか?

    十分な動作の確認は出来ていないので、検証してください

    functions.phpに貼り付けと書きましたが、content-page.phpとかのテンプレートの先頭に書いても動作すると思いますので、そのテンプレートでしか使わないという場合は、一度試してください

    テンプレートに関数や、フィルタを書くのは、邪道ではないようです。( 動かないという事は、あるかもしれないですが、)
    場合によっては、そこでしか使わない機能を追加する場合には便利かもしれないです

    add_filter( 'the_content','my_more_content');
    
    function my_more_content( $content ){
    
    	$html = wp_nav_menu( array( 'theme_location' => 'sample', 'echo' => false ) );
    
    	if( is_page() and preg_match( '!<span id="more-[0-9]+"></span>!',$content, $regs ) ){
    
    		$content = str_replace( $regs[0],$regs[0].$html, $content );
    	}
    
    	return $content;
    }

    ショートコードをボタンで操作したいという事であれば、

    http://wordpress.org/plugins/addquicktag/

    などのプラグインを使うといいと思います。

    何が簡単かというのは実際に運用する人によって異なりますが、考え方として。

    【特定の固定ページに関連する、親子の一覧を表示させる】
    親子と決まっているのであれば、カスタムメニューを使うより、get_posts等をつかって自動で一覧を取得しちゃう方が楽でしょう。
    カスタムメニューだと固定ページ作成後改めてメニューを作らなければなりませんが、親子関係が必要無い任意の一覧等にしたい場合は良いと思います。

    また親子関係内で特に子の順序を任意の物にしたいのであれば「順序」を入力して上げれば良いでしょう。
    ただし、数字で入力しなければならないので、固定ページ一覧でドラッグアンドドロップで並び替えのできるプラグインを利用した方が直感的でしょう。
    表示する時は get_posts の引数で menu_order を指定すれば大丈夫です。

    なお、参考にされた投稿自体が4年前の物ですので、Codexを参考に今風の書き方にした方が良いと思います。
    例)

    <?php
    global $post;
    $page = $post->ID;
    if ($post->post_parent) {
        $page = $post->post_parent;
    }
    
    $args = array(
        'post_type' => 'page',
        'post_parent'=> $page,
        'posts_per_page' => -1,
        'orderby' => 'menu_order',
        'order' => 'ASC',
    );
    
    $myposts = get_posts( $args );
    foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br>
    <?php the_content('Read more...'); ?>
    <?php endforeach;
    wp_reset_postdata();?>

    ※このコードの場合、moreタグより前の本文を表示できますが、そこに画像が入っていればそれも出力されますのでご注意ください。

    【固定ページ本文内の任意の場所に追加する】
    簡単にボタンひとつで追加する、nobitaさんの紹介しているプラグインで書き込んで欲しいショートコード用のボタンを追加すれば可能です。

    余談ですが
    先に私が紹介したプラグイン「Child Pages Shortcode」は特に管理画面など無くショートコードを提供するだけの物です。
    デフォルトではショートコードを書いたページの子ページ一覧を出力するだけですが、
    任意の固定ページのIDを指定することができるので、子ページでも親ページのIDを取得してショートコードに変数として渡すようにカスタマイズすれば大丈夫なだけです。

    トピック投稿者 gellgugu

    (@gellgugu)

    nobitaさん、ありがとうございます。
    バッチリ出来たのですが、どうやら全ての固定ページに適用されてしまうようです。

    おそらく
    if( is_page() and preg_match( '!<span id="more-[0-9]+"></span>!',$content, $regs ) ){
    こちらのis_page()の部分を条件分岐させて、「親ページのIDとその子ページ」という条件にすれば可能かと思われますが、今回の場合の条件分岐がうまく行きません。。。

    例えば親のIDが7の場合
    if( is_page("7") && $post->post_parent and preg_match( '!<span id="more-[0-9]+"></span>!',$content, $regs ) ){
    これではダメなのでしょうか?

    ショートコードのプラグインもありがとうございます。
    こちらも使用するかどうか検討したいと思います。

    トピック投稿者 gellgugu

    (@gellgugu)

    gatespaceさん、ありがとうございます。

    確かに、何が簡単かというのは人それぞれですね。
    また、get_postsを使って子ページのタイトルを一覧する事の方が手間が少ないですね。
    ただ、このget_postsで取得した一覧をmoreタグ部分に表示となるとより複雑なコードになりませんか?
    それが出来るならカスタムメニューをいじる手間も無くなるので一番良いと思います。

    また、固定ページの順序をドラッグアンドドロップで並び替えが出来るプラグインがあるとは知りませんでした。
    検索して見たいと思います。

    また、コードを今風にアレンジしていただきありがとうございます。
    こちらの方がより見やすくて分かりやすいですね。
    早速変更したいと思います。

    バッチリ出来たのですが、どうやら全ての固定ページに適用されてしまうようです。

    固定ページは、moreを使う事が前提になっていないので、$more = false;を追加すればいいです

    gatespaceさんのコードに追加

    foreach ( $myposts as $post ) : setup_postdata( $post );
    $more = false;
15件の返信を表示中 - 1 - 15件目 (全26件中)
  • トピック「moreタグ部分にコンテンツを挿入」には新たに返信することはできません。