WordPressテーマSANGOの質問

人気記事ウィジェットからカスタム投稿タイプを外したい

アバター
mak

はじめまして。この度SANGOを導入させていただきました。使いやすくてとても助かっています。

一点質問させて下さい。
人気記事ウィジェットはカスタム投稿タイプも含まれるようになっている、とのことですが、逆に含まれないようにすることは可能でしょうか?
どうぞよろしくお願いいたします。

SANGO ver1.5コンセプト
SANGO Ver1.5 アップデート内容と注意点
コメントへの回答
サルワカくん
サルワカくん
2018/10/29

少し長いですが、以下のコードを子テーマのfunctions.phpに追加して頂けますか?
(人気記事の関数をオーバーライドしています)

//人気記事ウィジェットをオーバーライド
class newMyPopularPosts extends WP_Widget {
  function __construct() {
      parent::__construct(false, $name = '人気記事');
    }
    function widget($args, $instance) {
        extract( $args );
        $title = apply_filters( 'widget_title', $instance['title'] );
        $entry_num = apply_filters( 'widget_body', $instance['count'] );
        $show_num = apply_filters( 'widget_checkbox', $instance['show_num'] );
        $show_views = apply_filters( 'widget_checkbox', $instance['show_views'] );
        //以下出力されるHTML
      ?>
        <div class="widget my_popular_posts">
          <?php if ( $title ) echo $before_title . $title . $after_title; ?>
          <?php
            $args = array(
                'post_type'     => 'post',
                'numberposts'   => $entry_num,
                'meta_key'      => 'post_views_count',
                'orderby'       => 'meta_value_num',
                'order'         => 'DESC',
            );
            $pop_posts = get_posts( $args );
            if($pop_posts) : ?>
                <ul class="my-widget<?php if($show_num){$i = 1; echo ' show_num';}?>">
                  <?php foreach( $pop_posts as $post ) : ?>
                  <li><?php  //順位
                        if($show_num){ echo '<span class="rank dfont accent-bc">'.$i.'</span>'; $i++;} ?><a href="<?php echo get_permalink($post->ID); ?>">
                        <?php if(get_the_post_thumbnail($post->ID)): ?><figure class="my-widget__img"><?php echo get_the_post_thumbnail($post->ID, 'thumb-160'); ?></figure><?php endif; ?>
                        <div class="my-widget__text"><?php echo $post->post_title; ?><?php //views
                        if($show_views) echo '<span class="dfont views">'.get_post_meta($post->ID, 'post_views_count', true).' views</span>'; ?></div>
                      </a></li>
                  <?php endforeach; ?>
                  <?php wp_reset_postdata(); ?>
                </ul>
            <?php endif; ?>
        </div>
      <?php  } //END出力されるHTML

    //人気記事ウィジェットを出力
    function update($new_instance, $old_instance) {
      $instance = $old_instance;
      $instance['title'] = strip_tags($new_instance['title']);
      $instance['count'] = $new_instance['count'];
      $instance['show_num'] = $new_instance['show_num'];
      $instance['show_views'] = $new_instance['show_views'];
      return $instance; }

    function form($instance) {
      $title = isset($instance['title']) ? esc_attr($instance['title']) : '';
      $entry_num = isset($instance['count']) ? $instance['count'] : '';
      $show_num = isset($instance['show_num']) ? $instance['show_num'] : '';
      $show_views = isset($instance['show_views']) ? $instance['show_views'] : '';
      ?>
        <p>
          <label for="<?php echo $this->get_field_id('title'); ?>">
          タイトル:
          </label>
          <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" />
        </p>

        <p>
           <label for="<?php echo $this->get_field_id('count'); ?>">
           表示する記事数
           </label>
           <input class="tiny-text" id="<?php echo $this->get_field_id('count'); ?>" name="<?php echo $this->get_field_name('count'); ?>" type="number" step="1" min="1" value="<?php echo $entry_num; ?>" size="3">
        </p>

        <p>
          <input id="<?php echo $this->get_field_id('show_num'); ?>" name="<?php echo $this->get_field_name('show_num'); ?>" type="checkbox" value="1" <?php checked( $show_num, 1 ); ?>/><label for="<?php echo $this->get_field_id('show_num'); ?>">順位を表示する</label>
        </p>
        <p>
          <input id="<?php echo $this->get_field_id('show_views'); ?>" name="<?php echo $this->get_field_name('show_views'); ?>" type="checkbox" value="1" <?php checked( $show_views, 1 ); ?>/><label for="<?php echo $this->get_field_id('show_views'); ?>">累計閲覧数を表示</label>
        </p>
        <?php
    }
}

function override_popular_widget() {
	unregister_widget('myPopularPosts');
	register_widget('newMyPopularPosts');
}
add_action('widgets_init', 'override_popular_widget',99);
//END 人気記事をオーバーライド

もしかすると一旦「人気記事ウィジェット」が、ウィジェットエリア上から外れてしまうかもしれません。
その場合、お手数をおかけしますが、再度ドラッグして追加して頂く必要があります。

アバター
mak
2018/10/31

早速やってみます。ご丁寧な対応、ありがとうございます。

サルワカくん へ返信する

* は入力必須項目です。
コメント投稿ガイドラインを読んでから投稿してください。
メールアドレスは公開されませんが、名前は公開されます。

HTMLやPHPのコードを掲載するときはHTMLエスケープツールで特殊文字を変換してから貼り付けてください。