質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • PHP

    20367questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    7224questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

WordPress ウィジットをページにより非表示にしたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 153
退会済みユーザー

退会済みユーザー

 前提・実現したいこと

WordPressのテンプレート「LION Media」を使ってブログを作成中です。

LION Media デモサイト → http://lionmedia.fit-jp.com/

こちらのサイドバーにある「最近の投稿」などの項目をトップページでは非表示に、記事ページでは表示するよう変更したいです。

WordPressもPHPも初心者なので、分かる方がいましたら教えていただけると嬉しいです。よろしくお願い致します。

 該当のソースコード

↓↓↓新着記事ウィジットのPHP(親テーマ内のfunctions.php)↓↓↓

//////////////////////////////////////////////////
//新着記事ウィジェットアイテムのフォーマット変更(サムネイル追加)
//////////////////////////////////////////////////
class fit_recent_posts_widget extends wp_widget_recent_posts {
    function widget($args, $instance) {
        extract( $args );
        $title = apply_filters('widget_title', empty($instance['title']) ? __('Recent Posts') : $instance['title'], $instance, $this->id_base);

        if( empty( $instance['number'] ) || ! $number = absint( $instance['number'] ) )
            $number = 10;

        $r = new WP_Query( apply_filters( 'widget_posts_args', array( 'posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true ) ) );
        if( $r->have_posts() ) :

            echo $before_widget;
            if( $title ) echo $before_title . $title . $after_title; ?>
            <ol class="imgListWidget">
              <?php while( $r->have_posts() ) : $r->the_post(); ?>                
              <li class="imgListWidget__item">
                <a class="imgListWidget__borderBox" href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><span>
                <?php if ( has_post_thumbnail()): ?>
                  <?php the_post_thumbnail('thumbnail'); ?>
                <?php else: ?>
                  <img src="<?php echo get_template_directory_uri(); ?>/img/img_no_thumbnail.gif" alt="NO IMAGE">
                <?php endif; ?>
                </span></a>
                <h3 class="imgListWidget__title">
                  <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                  <?php if( !empty( $instance['show_date'] )): ?><span class="post-date"><?php the_time('Y.m.d'); ?></span><?php endif; ?>
                </h3>
              </li>
              <?php endwhile; ?>
            </ol>
            <?php
            echo $after_widget;

        wp_reset_postdata();         
        endif;
    }
}
function fit_recent_widget_registration() {
    unregister_widget('wp_widget_recent_posts'); register_widget('fit_recent_posts_widget');
}
add_action('widgets_init', 'fit_recent_widget_registration');

 試したこと

参考にしている記事 → https://www.studiobrain.net/10958
こちらの「★トップページ(ホームとフロントページ)にだけ表示したくない場合」のコードの中に上記のコードをそのまま入れてみましたがエラーが起こります。

<?php if ( !is_home() && !is_front_page() ) : ?>
ここに上記の「新着記事ウィジェットアイテムのフォーマット変更(サムネイル追加)」の中身をコピー
<?php endif; ?>

 補足情報(FW/ツールのバージョンなど)

LION Media デモサイト → http://lionmedia.fit-jp.com/

参考にしている記事 → https://www.studiobrain.net/10958

 追記

CHERRYさんの教えていただいた通りにコードを変えてみましたができませんでした。

function fit_recent_widget_registration() {
        unregister_widget('wp_widget_recent_posts');  //ここを↓に持ってきてもダメでした
    if ( is_single() ){
        register_widget('fit_recent_posts_widget');
    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

こちらのサイトを参考にプラグインを追加しました。
https://moonys-house.com/2018/04/14/post-1611/

【ウィジェットのロジック】の欄に
https://www.studiobrain.net/10958
こちらのサイトを参考に

!is_home() && !is_front_page()


と入力したらトップページ以外のページでのみ表示されるようになりました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

参考サイトだけでなく、どのようなことを試したか記載して欲しいところですが...


個別投稿のページだけで、ウィジットを表示したいのであれば、is_single() で個別投稿ページを判断できるので、ファンクションの中で、下記のように条件分岐させるのが簡単でしょう

if ( is_single() ){
  // ウィジットの登録処理を書く
}

条件分岐タグ 参照


(追記 2018.07.13 13:47)
コメント欄では、インデントがつかなかったので、解答欄にも追記。 fit_recent_widget_registration を以下のように書き換えて

function fit_recent_widget_registration() {
    if ( is_single() ){
        unregister_widget('wp_widget_recent_posts');
        register_widget('fit_recent_posts_widget');
    }
}


で、どうでしょうか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/13 13:36 編集

    回答ありがとうございます。
    試したことの記載が漏れていました。すみません。参考サイトに書いてあるコードで上記の「新着記事ウィジットのPHP」を囲んでみましたがダメでした。

    教えていただいたコードの中に上記のコードを入れてみましたができませんでした。そういうことではないのでしょうか。
    WordPressもPHPも初心者なので理解が間違っていたらすみません。

    あと「個別投稿のページだけ表示」ではなく「トップ以外のページ全てに表示」を希望してます。

    キャンセル

  • 2018/07/13 13:45 編集

    出先なので、テストできていませんが...

    widget を登録する処理で判断するのが良さそうです。 fit_recent_widget_registration を下記のように書き換えて

    ```
    function fit_recent_widget_registration() {
    if ( is_single() ){
    unregister_widget('wp_widget_recent_posts');
    register_widget('fit_recent_posts_widget');
    }
    }
    ```
    で、どうでしょうか?

    キャンセル

  • 2018/07/13 13:49

    あ、もしかすると `unregister_widget('wp_widget_recent_posts');` は、if の前に出すがいいかもしれません。

    キャンセル

  • 2018/07/13 13:59 編集

    出先からありがとうございます。
    教えていただいた通りに書き換えてみましたが、unregister~をifの前に移動する前も後もダメでした…移動後のコードを追記欄に残しておきます。
    教えていただいたのにすみません。

    ■変更後はアイキャッチ画像が消えただのリスト(箇条書き)になる&トップページから消えない という状態です。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20367questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    7224questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。