WordPressテーマSANGOの質問

「この記事では広告を非表示」にチェックを入れた時に特定のウィジェットは表示させるようにしたい

アバター
まつり

はじめまして。よろしければ教えて頂きたいのですが、「この記事では広告を非表示」をチェックを入れた時に非表示されるウィジェットを教えて頂きたいです。また、チェックを入れた場合に特定のウィジェットのみ表示させる方法はありますでしょうか。
チェックを入れた場合にも「アドセンス関連記事型広告」は表示させたいです。

ウィジェットの設定をしよう:広告の貼り方も解説
コメントへの回答
サルワカくん
サルワカくん
2020/06/11

お世話になっております。
「この記事では広告を非表示」をチェックを入れた時ですが、「◯◯広告」という名前のウィジェットのみが非表示になります。
(どのウィジェットに対して広告が貼られているのかの判断が難しいため、他のウィジェットは非表示になりません)

チェックを入れた場合にも「アドセンス関連記事型広告」は表示させたい

→少しトリッキーなカスタマイズをするのが良いかもしれません。
(SANGOが出力する記事下の関連記事は使わないと思うので)SANGO関連記事の出力をGoogleアドセンスの関連記事広告コードに置き換えてしまうという方法です。

①アドセンス関連記事型広告ウィジェットは外します
output_sng_related_posts()というSANGOの関連記事出力関数を上書きし、Googleの広告コードが出力されるようにします。
具体的には、子テーマのfunctions.phpに以下を追加します。

function output_sng_related_posts() {
?>
<div class="my-google-related-ads">
  <!-- ここに広告コードを貼り付け -->
</div>
<?php
}

↑アドセンスの広告コードを<!-- ここに広告コードを貼り付け -->の部分に貼り付けます。
これで、SANGOの関連記事の代わりに、(「この記事では広告を非表示」をチェックを入れても常に)アドセンスの関連記事が表示されるようになります。


さらに細かく出力条件を変えたい場合は、関数の中でWordPressの条件分岐を使うのが良いと思います。


広告前後の余白が気になる場合は、以下のようにCSSでmarginを指定すればOKです。

.my-google-related-ads {
  margin: 30px 0;
}

よろしくお願いします。

アバター
まつり
2020/06/11

早速の返信ありがとうございます。
使用している用途としては、「アドセンス関連記事型広告」のウィジェットエリアに別のアフィリエイト広告をカスタムHTMLのウィジェットで追加しています。
その為、広告を非表示にチェックした記事でも「アドセンス関連記事型広告」のウィジェットエリアを表示させたいと考えています。
また、別のウィジェットエリアでも同様に使用したい場合があるので、宜しければ広告を非常時にチェックした場合でも指定したウィジェットエリアを表示させる方法があると助かります。
また、今回「広告を非表示」にチェックした記事に「アドセンス関連記事型広告」のウィジェットエリアが表示されなかった為、全ての記事の「広告を非表示」のチェックを外しました。記事数が多いのでかなり大変な作業だったのですが、「広告を非常時」にチェックを入れた記事を一括で管理することは不可能でしょうか。
宜しければアドバイスを頂けると幸いです。

サルワカくん
サルワカくん
2020/06/12

その為、広告を非表示にチェックした記事でも「アドセンス関連記事型広告」のウィジェットエリアを表示させたいと考えています。

→ それであれば、出力部分のPHPファイルをカスタマイズする必要があります。

①子テーマにpartsフォルダーを作成
②さらにその中にsingleフォルダーを作成
③その中にentry-footer.phpを親テーマから複製
④子テーマのentry-footer.phpに以下のような行があると思います。

if( !get_post_meta( $post->ID, 'disable_ads', true ) && is_active_sidebar('ads_footer') ) {

この行を以下のように編集します。

if( is_active_sidebar('ads_footer') ) {

これでチェックの有無に関わらず、常に関連記事広告ウィジェットが表示されるようになります。

別のウィジェットエリアでも同様に使用したい場合があるので、宜しければ広告を非常時にチェックした場合でも指定したウィジェットエリアを表示させる方法があると助かります。
→上述のような制御を1つ1つ行う必要があるため恐縮ながら難しいです。

「広告を非常時」にチェックを入れた記事を一括で管理することは不可能でしょうか。
→ダッシュボード上からは難しいですね…。そのような機能の実装もできなくもないですが、システムエラーがあった場合のリスクが非常に大きい/ユーザーによる誤操作のリスクが大きい/処理が重い/テーマによるUIが複雑になるなどの理由から実装するべきではないと考えています。
やるとすれば、データベースを直接上書きするのが良いと思います。
具体的にはphpMyAdminを使ってDBにアクセスし、「wp_postmeta」テーブルを開き、Searchタブからmeta_key: 「disable_ads」で検索をかけます。そうすると、各記事の「広告を非表示」の値一覧で出てきます。それぞれのmeta_valueをONにするなら「1」などの文字列に、OFFにするなら空欄に書き換えればOKです。

恐れ入りますが、よろしくお願いします。

アバター
まつり
2020/06/13

丁寧な回答ありがとうございます。
早速実装しました。
非表示にチェックを入れた記事でも問題なく関連記事広告が表示されるようになりました。
ありがとうございます。
また、その他の件についても適切なアドバイスをありがとうございました。
今後ともよろしくお願いします。