サポート » 使い方全般 » カスタム投稿ページのウィジェットからの除外に付いて

  • 解決済 csence

    (@csence)


    お世話になっております。

    先日、解決していた「最近の投稿」ウィジェットで表示させたくない投稿(タグ)の処理に付きまして、お力をお貸し願えればと思い再度お願いする次第です。

    どの様な状態かと申しますと、ワードプレスのバージョン3.1でカスタム投稿タイプに付与しております「info」タグのものを、ウィジェットから除外するコードをfunctions.phpに組み込み問題なく動作していたのですが、「postie」というプラグインがバージョンに対応していないらしく、それに対応させる為に3.05にダウングレードしました。

    ところが、バージョン3.05にしたらfunctions.phpに組み込み問題なく動作していたものが、無視されている様な状況になり、大変困っております。

    コードは、以下の通り↓

    /*最近の投稿*/
    add_action( 'widgets_init', 'my_widgets_init' );
    function my_widgets_init() {
      register_widget('my_widget_recent_posts');
    }
    class My_Widget_Recent_Posts extends WP_Widget_Recent_Posts {
    function My_Widget_Recent_Posts() {
    $widget_ops = array('classname' => 'my_widget_recent_entries', 'description' => 'info以外の最新の投稿' );
    $this->WP_Widget('my-recent-posts', __('Recent Posts'), $widget_ops);
    $this->alt_option_name = 'widget_recent_entries';
    add_action( 'save_post', array(&$this, 'flush_widget_cache') );
    add_action( 'deleted_post', array(&$this, 'flush_widget_cache') );
    add_action( 'switch_theme', array(&$this, 'flush_widget_cache') );
    }
    function widget($args, $instance) {
    $cache = wp_cache_get('my_widget_recent_posts', 'widget');
    if ( !is_array($cache) )
    $cache = array();
    if ( isset($cache[$args['widget_id']]) ) {
    echo $cache[$args['widget_id']];
    return;
    }
    ob_start();
    extract($args);
    $title = apply_filters('widget_title', empty($instance['title']) ? __('Recent Posts') : $instance['title'], $instance, $this->id_base);
    if ( ! $number = absint( $instance['number'] ) )
    $number = 10;
    $id = get_term_by( 'slug', 'info', 'post_tag'  )->term_id;
    $r = new WP_Query(array('tag__not_in' => $id, 'posts_per_page' => $number, 'nopaging' => 0, 'post_status' => 'publish', 'ignore_sticky_posts' => true));
    if ($r->have_posts()) :
    ?>
    <?php echo $before_widget; ?>
    <?php if ( $title ) echo $before_title . $title . $after_title; ?>
    
    <ul>
    			<?php  while ($r->have_posts()) : $r->the_post(); ?>
    			<li><a href="<?php the_permalink() ?>" title="<?php echo esc_attr(get_the_title() ? get_the_title() : get_the_ID()); ?>">
    						<?php if ( get_the_title() ) the_title(); else the_ID(); ?>
    						</a></li>
    			<?php endwhile; ?>
    </ul>
    <?php echo $after_widget; ?>
    <?php
    wp_reset_postdata();
    endif;
    $cache[$args['widget_id']] = ob_get_flush();
    wp_cache_set('my_widget_recent_posts', $cache, 'widget');
    }
    }
    ?>

    ダウングレードに問題があったのか、、上記コードで引っ掛かっているのか皆目見当が付きません。

    どちら様か、良きアドバイスを頂けましたら幸いです。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • WP3.0.5 でも動きそうなので、現状では
    ・管理画面[外観|ウィジェット]で当該のウィジェットを使用していない
    ・info以外のタグを持つ投稿が無い
    辺りを再確認◎

    カスタム投稿タイプに付与して

    WP_Query の array に 'post_type' => 'カスタム投稿タイプ名' の指定が要る気がしたりしなかったり。

    トピック投稿者 csence

    (@csence)

    「Kz」様

    前回は、大変お世話になりましてありがたく思っております。
    せっかく御教示頂いたのに、うまく生かせていない私の知識不足が情けなく…。

    管理画面で、何度かやってみたのですが、うまくいきませんでした。

    「info」タグを付与しているのは、メールからカスタム投稿ページへ投稿させたものですが、「最近の投稿」以外、うまく処理している様です。

    バージョン3.1のときは、うまく処理できていたのですが、やはりダウングレードが問題だったのでしょうか?

    この部分が処理できると、非常にありがたいのですが、夕方からいじくりまわしているのですが難しいですね。

    WP_Queryの部分をもう少し掻い摘んで御教示頂けるとありがたいのですが、如何でしょうか?

    お忙しい中、度々御無理を申しますがお助け頂きたくお願い致します。

    info タグが付いてるのがカスタム投稿タイプの記事なら、
    何もしなくてもウィジェットには出てこない気がします。

    作成されたカスタム投稿タイプでかつ info タグの付いてない記事を表示したいなら

    $r = new WP_Query(
      array(
        'post_type' => 'カスタム投稿タイプの名前をここに指定してください',
        'tag__not_in' => $id,
        'posts_per_page' => $number,
        'nopaging' => 0,
        'post_status' => 'publish',
        'ignore_sticky_posts' => true
      )
    );

    バージョン3.1のときは、うまく処理できていた

    目的のカスタム投稿タイプの記事のうち、info タグの付いていないものだけ表示していましたですか??

    トピック投稿者 csence

    (@csence)

    「Kz」様

    誠にありがとうございます。
    御教示頂きましたコードでテストしてみました。そこで何が問題なのか、自分なりに分かった気が致します。

    おっしゃるように、コード自体には問題がありませんでした。私の理解不足という事です。

    テストでは、「管理」からカスタム投稿タイプの「info」より記事投稿しますとウィジェットに表示されました。

    $id = get_term_by( 'tag', 'info', 'post_tag' )->term_id;
    の意味がよくわかっておりませんでした。

    上記のコードでは、きちんと「info」タグを取得し
    'tag__not_in' => array( $id ) ,
    に反映されている事が、はっきりとわかりました。

    カスタム投稿タイプ「info」ページには、メール投稿したものだけを表示させ、その他のページには、表示させたくないものですから、index.php(トップページ)には、

    <?php $id = get_term_by( 'tag', 'info', 'post_tag' )->term_id; //infoがタグ名の場合の値を「$id」に代入
    $paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
    query_posts( array(
        'tag__not_in' => array( $id ) ,//タグ「info」の記事を除外
        'paged' => $paged,
    ) );

    を挿入し、うまく除外表示しております。

    結局のところ、何がやりたいかといいますとメール投稿したものは、カスタム投稿タイプの
    「インフォメーション」ページにのみ表示させ、その他には表示させないという事です。

    現状では、メール投稿したものは、通常投稿(管理の投稿)に組み入れられ、当然のことながらウィジェット「最近の投稿」にも表示されてしまうという事になっているわけです。
    (やっと理解できました・・・でもなぜ3.1の時にうまくいっていたのか、不明です)

    メール投稿は、プラグインの「postie」を利用しておりまして、そちらの方でメール投稿する際に「info」タグを設定しております。
    (Default post by mail tag(s)という項目でinfoタグを設定)

    ※この部分で私は、「info」タグを付与しているわけだから、ウィジェットのコードに
     $id = get_term_by( 'tag', 'info', 'post_tag' )->term_id;
     が入っていれば、メール投稿したものも除外されるはずと思っておりました。

    「postie」自体、カスタム投稿タイプに対応しているかは不明(おそらく直接は無理?)ですが、対処する方法がないかと考えております。

    長くなってしまいましたが、コードを編集する事で対応可能であれば御教示頂くと大変助かります。

    宜しくお願い申し上げます。

    #念のため
    $id = get_term_by( 'tag', 'info', 'post_tag' )->term_id;
    でなくて
    $id = get_term_by( 'slug', 'info', 'post_tag' )->term_id;
    です◎
    post_tag というビルトインカスタム分類(投稿タグ)のタームのうち
    slug が info であるタームの ID を取得しています。
    で、そのターム ID を持たない普通(ビルトイン)の投稿を取得しています。

    普通の投稿に「info」タグを付けるか付けないか、だけにすれば
    「カスタム投稿タイプ」を使う必要が無くて幸せになれますが
    そこは大人の事情な感じですか?

    質問が「postie で指定のカスタム投稿タイプに投稿したい」に変わったので
    改めて「プラグイン」で質問されると何かと良いです◎

    トピック投稿者 csence

    (@csence)

    「Kz」様
    大変お手数をお掛け致しました。

    ‘tag’と’slug’につきましては、両方とも試しておりましたが、変化なしの状態でした。
    ところが、先ほど編集ソフト(Dreamweaver CS5)を再起動し、get_term_by部をいじくっておりましたところ、なんと処理できている状態になりました。

    ローカル環境で編集していたのですが、編集ソフトの具合が良くないのか編集後の反映が
    出来ていないというお粗末な結果でございました。

    現在は、$id = get_term_by( ‘slug’, ‘info’, ‘post_tag’ )->term_id;
    で、問題ない表示が出来ております。

    Dreamweaverを再インストして、もう少し様子を見てみようと思っております。

    大変お騒がせ致しました事、お詫び申し上げます。
    又、貴重なお時間を割いて頂きました事、改めましてお礼申し上げます。
    本当にありがとうございました。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「カスタム投稿ページのウィジェットからの除外に付いて」には新たに返信することはできません。