feedlyの購読者数がリセットされてしまった

Simplicityの特徴 › フォーラム › 不具合報告 › feedlyの購読者数がリセットされてしまった

16件の返信スレッドを表示中
  • 投稿者
    投稿
    • #26523
      okkiisane
      ゲスト

      お世話になっています。

      先日、Sinplicity1.6.3から1.6.4にアップデートしたのと同じタイミングでfeedlyの高読者数がリセットされたような状態になってしまいました。

      正確には、記事中に自分で貼っている公式購読ボタンからはこれまでの購読者数で表示されるのですが、Simplicityで表示してくれる投稿上下のボタンや、このブログをフォローするのボタンから飛ぶと少ない購読者数が表示されてしまいます。

      リンク先URLを確認すると、
      公式ツールで作成した前者が
       http://cloud.feedly.com/#subscription%2Ffeed%2Fhttp%3A%2F%2Fsn9-blog.okinawa%2Ffeed%2F
      Simplicityで作成の後者が
       http://feedly.com/index.html#subscription%2Ffeed%2Fhttp://sn9-blog.okinawa/feed/
      となっており、元は同じサイトなのにURLエンコードされているか否かでfeedlyでは別々のサイトと判断されているようです。

      一度、Simplicityのテーマ編集で「sns-buttons-***.php」に含まれている【<?php urlencode(bloginfo(‘rss2_url’)); ?>】の部分を全て【http%3A%2F%2Fsn9-blog.okinawa%2Ffeed%2F】に書き換える事で以前と同じ購読者数を表示できたのですが、この方法だとマルチサイト化しサブドメインでSimplicityを使っているブログでも登録先が同じようになってしまうためどうしたらいいものか困っています。

      他の方からの報告が無いので、これがSimplicityに依存する問題ではないのかもしれませんが、大した購読者数ではないとは言っても折角登録して頂いた方の数がモチベーションを保つ一つの要素だったので、何かアドバイスを頂けるとうれしいです。

    • #26529
      アバター画像わいひら
      キーマスター

      Sinplicity1.6.3から1.6.4の変更で、feedly関係は変更していないので、そのようになることはちょっと考えにくいです。
      1.6.6では変更しましたが、当サイトのfeedly購読者数も問題なく以前の購読者数が表示されています。

      上記の2つ貼ってあるリンクは両方とも、購読者数が同じ1になっているようなので、本来の数字が表示されるリンクはないでしょうか?

    • #26531
      okkiisane
      ゲスト

      さっそく回答ありがとうございます。

      リンク先が同じ結果になってて失礼しました(汗)

      こちらが以前の登録リンクで、現時点での購読者数は22です。
      https://feedly.com/i/subscription/feed/http://sn9-blog.okinawa/feed

    • #26533
      okkiisane
      ゲスト

      連投すみません(^_^;)

      先ほどのリンクを見て、URLスキームかは関係ないかもと思い少しURLを弄っていたら

      購読者数22がこちら
      https://feedly.com/i/subscription/feed/http://sn9-blog.okinawa/feed
      購読者数1がこちら
      https://feedly.com/i/subscription/feed/http://sn9-blog.okinawa/feed/

      となっていました。最後のスラッシュの有無で変わってしまうようです。

    • #26534
      アバター画像わいひら
      キーマスター

      そうなんです。スラッシュ1つで変わってしまいます。
      公式のfeedly登録時にスラッシュのないもので登録すると、そのようになってしまいます。
      Simplicityは、Wordpress公式が吐き出すフィードURLを使用しているので、スラッシュを含んだものになってしまいます。

      解決策として、テンプレートでbloginfo(‘rss2_url’)が吐き出すURLの最後の/を取り除くよう、PHP関数で置換してやれば良いのではないかと思います。

    • #26536
      okkiisane
      ゲスト

      そうだったんですねorz
      取得URLの部分を弄らずしてSimplicityで作成されるボタンでも最近まで問題なく表示されていたのが不思議だったのかもしれません。(Yahoo Pipesが関係有るのかな?)

      解決策として、テンプレートでbloginfo(‘rss2_url’)が吐き出すURLの最後の/を取り除くよう、PHP関数で置換してやれば良いのではないかと思います。

      PHPなどのド初心者で何も分からないのですが、各「sns-buttons-***.php」ファイル内に、

      //str_replace (“検索文字列”, “置換え文字列”, “対象文字列”);

      $str = “http://sn9-blog.okinawa/feed/&#8221;;
      $str = str_replace(“/feed/”, “/feed”, $str);
      echo $str;

      と記載したらいいのでしょうか?

    • #26544
      hidekichi
      ゲスト

      bloginfoのrss2_urlの最後はスラッシュは入ってないと思うんですけれども、どうでしょう?

      試しに、header.phpあたりのbodyの下に、

      <?php
      echo bloginfo('rss2_url');
      ?>

      とでも入れて確かめてみてはいかがですか?
      記事タイトル上あたりにアドレスが出ると思います。

    • #26548
      アバター画像わいひら
      キーマスター

      動作確認はしていないですが、str_replaceを使うなら、以下のようにするといけるのではないかと思います。
      str_replace(“/feed/”, “/feed”, bloginfo('rss2_url'));

      もしうまくいかなかったまた書き込んでいただけると、こちらでも試してみます。

      >hidekichiさん
      僕のローカル環境で試すと/が入るようです。
      /が入るのと入らない違いは、何かの設定の違いなんでしょうかね。

    • #26550
      hidekichi
      ゲスト

      >わいひらさん

      最後のスラッシュはトレイリングスラッシュと言いまして、apacheのmod_dirの設定で変わったりします。

      ディレクトリの場合は必ずスラッシュで終わる必要があって、

      http://wp-simplicity.com/suport にアクセスがあった場合、
      http://wp-simplicity.com/suport/ 最後にスラッシュを付けてリダイレクトするのが普通の挙動です。
      そしてindex.htmlやらindex.phpやらを探すわけです。
      最初からファイルとして書いておけば、ファイルがない場合はスラッシュを付けてディレクトリとしてindex.phpとかないかなと探してみると言う動作でしょうか。それもない場合は404とか。

      うちのサーバーはおそらくmod_dirがmod_rewriteとあまり相性が良くないと言う点からmod_dirを無効にしているか、あるいはhtaccessで使用できないコマンドがあるため、また共用サーバーでmod_rewriteでパスが書き変えられた後リダイレクトされるとマズイ等の関係でoffにしているのかもしれません(理由は不明。
      ファイルへのアクセスならいいんですけどもディレクトリの場合はリダイレクトされるという所で色々考えさせられる設定みたいです。

      結果的に、最後のスラッシュはあってもなくても必要であれば勝手にサーバーがくっつけるものなので、もし表示されているようであればリネームするしかないのかもしれません。リネームせずとも、wordpressのアドレス+feedでも良いように思いますけれども、ここらは環境次第というところでしょうか。
      僕の経験からすると、最後にスラッシュを入れるサーバーはあまり見たことが無かったり。ただ今まで気にしたことがなかっただけでつけていたかも知れません。

      ちなみにwordpressは全ての環境で正しく動いており、同じように動作しない問題なのはサーバー設定という所です。ここらの違いで結果が違ってきたりすると思われます。

      またパーマリンクの設定でも異なります。
      http://wp-simplicity.com/suport/?page=100/
      とかオカシイですからね。どんなディレクリやねんってことになります。基本、デフォルトの場合は最後のスラッシュをrtrimとかで取り除いてるかも。

      試してませんが 参考: Remove trailing slash

      意味合い的には若干違いますが、最後のスラッシュを取り除きたい、付けたいという記事はたくさんあるようです。
      例: http://www.abc.com/test.php -> http://www.abc.com/test/ でphpが動作するようにしたいなど。

    • #26557
      okkiisane
      ゲスト

      わいひらさん、hidekichiさん
      アドバイスありがとうございます。

      PHPのPの字も知らないのですが、これを機会に少しは勉強しようと色々調べて、わいひらさんのこの記事とウェブで見つけたこちらの記事から、(wp-includes/fanction.php)に「/feed/ → /feed」へ置換の命令を、(wp-includes/canonical.php)に自動的にトレイリングスラッシュを付ける標準の仕様をリクエストしたURLのままにするための命令を加えることで解決出来るかもしれないと思ったのですが、

      コードを書いたこともなく作法(文法など)も分かっていない私が見よう見まねで書いた下のコードでは【Parse error: syntax error, unexpected ‘]’ in ファイル名+行目】というメッセージが出てしまいました(/_;)

      function str_replace() {
            str_replace('/feed/', '/feed', bloginfo('rss2_url'));
            ]
            return bloginfo('rss2_url');
      ]

      試したのは、wp-includes下のfunction.phpだったのですが、Simplicity親テーマ内またはSimplicity子テーマ内のfunction.phpへの変更がいいのかも合わせて教えて頂けるでしょうか?

    • #26558
      hidekichi
      ゲスト

      >okkiisaneさん

      たぶん、str_replaceはphpのコマンドであるので、違う名称のほうが良いかと思います。
      例えば、最後のスラッシュを取るので、remove_trailingslash()とか。
      またwordpressは最後のスラッシュを取る関数が用意されています(wp-includes/formatting.php内untrailingslashit関数)。

      $feed_address = bloginfo("rss2_url");
      $remove_trailingslash = untrailingslashit($feed_address);

      最後にスラッシュが入るかどうかはサーバーの環境次第なので、誰にでも当てはまるやり方ではありませんが、最後にスラッシュが入り、その部分だけなんとかしたい場合は上記でイケルのではないかと思います(試してません(笑)。

      誰にでも合うようにするためには、最後にスラッシュが入っているかどうかを正規表現やstrrposとかその他諸々でチェックして、かつ該当する部分だけ適用させないといけないので(全体に適用するとサーバーの設定的にややこしくなるので)、使いたいところだけうまく使えるようにする必要があります。

      またfeedlyはurlencodeも必要でしょうから、

      $encode_feedAddress = urlencode($remove_trailingslash);
      も追記する必要があるでしょうか。

      例えば、

      $feedAddress = bloginfo(home_url()) + "/feed";

      とかでも良いのかなぁと思ったり。home_url()にスラッシュがついてくるなら、+”feed”で。
      関数化するなら、

      function feedlyAddress(){
        $feed_address = bloginfo("rss2_url");
        // ここらで最後にスラッシュがあるかどうかを調べられると汎用的になる
        // 例えばfeed/があるかどうかでいいので、strposとかも良いかも。
        $remove_trailingslash = untrailingslashit($feed_address);
        //$encode_feedAddress = urlencode($remove_trailingslash); //エンコードが必要であれば
        return $remove_trailingslash; // or $encode_feedAddress
      
        /*もしくは、*/
        // $url = bloginfo(home_url()) + "/feed"; // スラッシュがドメインに入ってくる場合は + "feed"とか
        // $encode_feedAddress = urlencode($url); //エンコードが必要であれば
        // return $encode_feedAddress;
        // など
      }

      これを子テーマfunctions.phpに書いておいて、feedのアドレスが必要な時はfeedlyAddress()で呼び出せばよいのではないかと思います。ん、function内でbloginfoが効くだろうか…。効かない場合はこのレス一番下に対処法を。
      また関数名を何かしらよい感じのに変更して、引数に($mode)とかを入れておき、エンコードするしないを設定したりもできます。

      function something($mode){
        if ($mode === "enc"){
          // 最終的にエンコードする処理
          $needUrl = xxxx.xxx;
        } else {
          // それ以外はスラッシュだけを取り除いたそのままのアドレス
          $needUrl = zzzz.zzz;
        }
        return $needUrl;
      }

      たくさんのモードを付けたい場合はswitchでの条件分岐が便利ですが、switchは === ではなく == でチェックしているので注意が必要です。 === は型までチェックします。

      function something($mode){
        switch($mode) {
          case "enc":
            //エンコードの処理;
            $needUrl = xxx.xxx;
            break;
          case default:
            // 上記caseに当てはまらない時はエンコードせず;
            $needUrl = zzz.zzz;
        }
      
        return $needUrl;
      }

      など。

      関数内でbloginfoが効かない時は引数でアドレスを渡せばよいのではないかと思ったり。

      function feedlyAddress($url){
        //$urlに対して何かしらの処理
        return 処理したアドレスを返す
      }

      など。方法は色々ありそうです。

    • #26565
      アバター画像わいひら
      キーマスター

      #26557
      僕の言いたかった方法は、そうではなくて、親テーマのsns-buttons-balloon.phpとsns-buttons-icon.phpテンプレートを子テーマ内にコピーして、ファイルを開いて中のfeedly部分のbloginfo('rss2_url')を#26548で書いた方法で置き換えるように編集します。

      でも、うまくいくなら、どんな方法でも良いので、好きな方法でやってみてください。

    • #26574
      hidekichi
      ゲスト

      $feedAddress = bloginfo(home_url()) + "/feed";

      これ間違ってました。+連結はjQueryでした(笑)

      $feedAddress = bloginfo(home_url()) . "/feed";

      こんな感じでピリオドでつなぎます。

    • #26598
      okkiisane
      ゲスト

      わいひらさん、hidekichiさん
      再度のアドバイスありがとうございますm(__)m

      わいひらさんからのアドバイスを元に関係するテンプレートを子テーマにコピーして変更しました。

      記事の上下に表示させているSNSシェアボタンのfeedlyアイコンのリンク先については、
      ・sns-buttons-balloon.php
      ・sns-buttons-icon.php
      ・sns-buttons-defolt
      内の
      <?php urlencode(bloginfo('rss2_url')); ?>を
      <?php echo home_url('/feed'); ?>に置換し、
      PC版のブログ右上や記事下に表示されるフォローボタンのfeedlyアイコンのリンク先については、
      ・sns-pages.php
      内の
      <?php echo rawurlencode(get_bloginfo("rss2_url")); ?>を
      <?php echo home_url('/feed'); ?>に置換する事で変更可能でした。

      RSSアイコンのリンク先の合わせて変更したかったので、
      ・sns-pages.php
      内の
      <?php bloginfo('rss2_url'); ?>を
      <?php echo home_url('/feed'); ?>に置換しました。
      また、WordPressでは自動的にトレイディングスラッシュが付くため子テーマ内のfunctions.phpに、

      function mytheme_redirect_canonical( $redirect_url, $requested_url ) {
      	return $requested_url;
      }
      add_filter( 'redirect_canonical', 'mytheme_redirect_canonical', 10, 2 );

      を追記して、リクエストしたURLでそのまま表示する様に変更しました。

      以上の変更で、feedly登録時のURLをhttp://sn9-blog.okinawa/feedにする事が出来たのですが、
      購読者数についてはSimplicityのコマンド(get_feedly_count())を使用しているので、/feed/の値が表示されてしまいます。

      //feedlyの購読者数取得
      function get_feedly_count(){
        $feed_url = rawurlencode( get_bloginfo( 'rss2_url' ) );
        $res = '0';
        $subscribers = wp_remote_get( "http://cloud.feedly.com/v3/feeds/feed%2F$feed_url" );
        if (!is_wp_error( $subscribers ) && $subscribers["response"]["code"] === 200) {
          $subscribers = json_decode( $subscribers['body'] );
          if ( $subscribers ) {
            $subscribers = $subscribers->subscribers;
            set_transient( 'feedly_subscribers', $subscribers, 60 * 60 * 12 );
            $res = ($subscribers ? $subscribers : '0');
          }
        }
        return $res;
      }

      このどの部分を変更すればいいのでしょうか?
      また、子テーマのfunctions.php内にこのコマンドをコピーし変更したいのですが、そのままだと親テーマのfunctionsファイルととぶつかってしまうのかエラーになりました。同じコマンドを追記する場合、何か条件を追加する必要があるのでしょうか?

      そして、ここまでアドバイスを頂いておいて申し訳ないのですが、WordPress自体のbloginfo()で出力されるRSS2.0のURLを変更する方法があれば手順が少なくて済むような気がするのですが、 wp-includes/general-template.phpをイジればどうにかなるでしょうか?

      色々と注文ばかりですみません…

    • #26601
      アバター画像わいひら
      キーマスター

      WordPress自体のbloginfo()で出力されるRSS2.0のURLを変更する方法があれば手順が少なくて済むような気がするのですが

      できるのならそれが一番楽かもしれません。
      ただ、これまで作るのに、そういったことをする必要がなく、僕はそういった方法を知らないので、調べてみてください。
      というか、そもそもfeedlyがスラッシュ付きも、スラッシュなしも同じ物として扱うべきとは思います。

      wp-includes/general-template.phpをイジればどうにかなるでしょうか?

      そういった部分を変更しても良いですが、Wordpressのアップデートで元通りになるのでアップデートごとに修正する必要があります。

      get_feedly_count()の対応をするには、子テーマのfunctions.phpに以下のように書いて、

      //feedlyの購読者数取得
      function get_feedly_count_ex(){
        $feed_url = rawurlencode( home_url('/feed') );
        $res = '0';
        $subscribers = wp_remote_get( "http://cloud.feedly.com/v3/feeds/feed%2F$feed_url" );
        if (!is_wp_error( $subscribers ) && $subscribers["response"]["code"] === 200) {
          $subscribers = json_decode( $subscribers['body'] );
          if ( $subscribers ) {
            $subscribers = $subscribers->subscribers;
            set_transient( 'feedly_subscribers', $subscribers, 60 * 60 * 12 );
            $res = ($subscribers ? $subscribers : '0');
          }
        }
        return $res;
      }

      テンプレートの
      get_feedly_count()部分を
      get_feedly_count_ex()に変更すればうまくいくのではないかと思います。(動作確認はしていません。)

    • #26605
      okkiisane
      ゲスト

      さっそくの回答ありがとうございます!
      アドバイスして頂いたget_feedly_count_ex()の方法で解決しました(*^_^*)

      目的がfeedlyでの購読者数を以前の表示に戻す(/feed/ → /feedにする)事だったので色々と書き換える必要が出たのですが、改めて考えるとまだまだ購読者数は多くはないですしブログ記事で購読者に改めて登録してもらうようお願いした方がいいのかも知れないと思えてきました(^_^;)

      WordPressの本来の仕様に則った方が今後も使いやすく、管理が楽なので長い目で見ればメリット多いですよね。

      そもそもfeedlyがスラッシュ付きも、スラッシュなしも同じ物として扱うべきとは思います。

      そうですよね。英語が判れば報告してるのになぁと思ったり…

      わいひらさん、hidekichiさんお手を煩わせてしまいましたが、今回の件でPHPやWordPressの仕組みなどについて勉強させて頂けて感謝してますm(__)m

      購読者数が少ないので今後本来の設定に戻すと思いますが、購読者数がかなり合ったのに私の様な状態に陥っている方の役に立てれば嬉しいので、今回の件は私のブログでまとめたいと思います。

      本当にありがとうございました。

    • #26607
      アバター画像わいひら
      キーマスター

      改めて考えるとまだまだ購読者数は多くはないですしブログ記事で購読者に改めて登録してもらうようお願いした方がいいのかも知れないと思えてきました(^_^;)

      WordPressの本来の仕様に則った方が今後も使いやすく、管理が楽なので長い目で見ればメリット多いですよね。

      デフォルトで使えば、今後仕様変更の不安はないですけど、feedlyの購読者数22と言えば、結構な数なので悩ましいところですね;

16件の返信スレッドを表示中
  • トピック「feedlyの購読者数がリセットされてしまった」には新しい返信をつけることはできません。
スポンサーリンク
アドセンス(大)
アドセンス(大)