PHP

こんにちは!

WordPressでブログを始めようとしたときにSNSのシェアボタンを導入しようと思ったのですが、TwitterやFacebookはもちろんはてブも含めて考えるとあまり選択肢がありませんでした。
その中でもはてなにも対応していて便利そうな『AddToAny Share Buttons』を紹介します。

simple_social_buttons

このプラグインを選んだ理由

WordPressのプラグインでソーシャルボタンを追加するものは複数あります。
ただ僕がほしかったはてブのシェアボタンを追加出来るプラグインは少数だった気がします。
以前であればSocial Bookmarking Liteがあったのでそちらでよかったのですが、現在は開発が停止されておりPHP7以上だとうまく動かないです。
そのため新しいプラグインを探す必要があったのですが、その中でも良さそうだったのがAddToAny Share Buttonsです。

プラグインの良さそうなところ

まずはてブが入っているところがよいところです。
対応言語としては基本的に英語なのですがアイコン表示がデフォルトなのであまり言語が気になりません。

また以下の画像を見ればわかるとおり本当にたくさんのシェアボタンを追加することが出来ます。

z_simple_share_buttons_buttons

この中のボタンを自由に選択して配置出来るのがこのプラグインのよいとこです。
また自分のブログでは行っていないですがページ中に常に表示させるような設定もあるのでものによってはとても便利なものになるかと思います。

あとはカスタマイズなどもある程度自由に出来るので自分でHTMLやCSSなどが書ける人はこのプラグインを使うのもよいでしょう。

プラグインのちょっと気になるところ

このプラグインの気になるところなのですが、シェアボタンを押すと一度 addtoany.com にリンクしたあとにredirectされてシェア画面に到達します。
これは公式の見解によるとシェアボタンの変更に容易に対応するため、とのことです。
情報の取り扱いなどについてはaddtoanyの公式の見解が出ているので気になる方はそこを一度読んだあとに納得出来れば使用すればよいかと思います。
個人的には僕の用途だとただのブログ記事なのでそこまで問題じゃないし何かSNS側で変更があってもサーバー側で適切に変更してもらえるのであれば利便性があるのでよいかなと思いました。
ここらへんはプラグインを選ぶときは常にそうですがどのようにデータが扱われているかは多少なりとも意識する必要があるかと思います。

最後に

ひとまずははてブがあるということでこのプラグインを採用しましたが他に良さそうなものがあればそちらに乗り換える可能性は高いです。
ただ今のところ利便性が高く、運営の対応なども誠実ではないかと思えるので便利に利用し続けたいと思います。
もしほかに便利そうなものがあればぜひ教えてください。

Read more

こんにちは。

WordPressを長く使っていると今はもう使っていないカテゴリーが一覧に出てしまって膨大なカテゴリーがページに出てしまうことがあるかと思います。
私も長く運用してしまった結果もう使わなくなってしまったカテゴリーや、すでに情報が古くなっているカテゴリーなどがあるためカテゴリーを削除するのではなく一時的に非表示にしたいと思いました。
そのようなときにfunctions.phpに貼り付けるだけで実現可能な便利なコードを紹介いたします。また WPCodeというWordPressプラグインを使用するとテーマの functions.php を汚すことなく特定のカテゴリーのみを非表示にすることが出来ます。テーマの更新などにも強くなるためこちらの方法でも良いと思います。
それでは早速紹介していきます。

functions.phpを使用する方法

それでは早速コードを紹介していきます。
以下はウィジェットに表示したカテゴリーを非表示にする方法です。事前にカテゴリーIDを取得しておく必要があります。

add_filter( 'widget_categories_args', 'widget_categories_args_filter' );

function widget_categories_args_filter( $cat_args ) {
    $exclude_arr = array( 2, 3 ); // ここにカテゴリーIDを入力する

    if( isset( $cat_args['exclude'] ) && !empty( $cat_args['exclude'] ) )
        $exclude_arr = array_unique( array_merge( explode( ',', $cat_args['exclude'] ), $exclude_arr ) );
    $cat_args['exclude'] = implode( ',', $exclude_arr );
    return $cat_args;
}

WPCodeを使用する方法

それでは次にWPCodeを使うパターンを紹介します。
新しいスニペットを追加して上で紹介したコードを挿入するのでWordPressの管理画面から『+ Add Snippet』をクリックしましょう。

次の画面で新しいスニペットを追加するので「Add Your Custom Code」と書かれている部分の『Use snippet』をクリックしましょう。

use_snippet

そうすると以下のような画面が出てくるので下の画像の赤枠部分を変更していきましょう。
まず、「Save Snippet」の横にあるトグルを青色に変更しておきましょう。これはこのスニペットを有効にするかどうかの設定で青色にしておかないと有効にならないのでまずは有効にしておきましょう。
その後は下のほうにタイトルを入力しましょう。今回は特定のカテゴリーを非表示にするスニペットを追加するので『特定のカテゴリーを非表示にする』と入力しています。他に希望のタイトルがあればそれを入力しましょう。
これから入力するコードはPHPなのでCode TypeはPHP Snippetにしましょう。
Code TypeをPHPにしたら下のほうのコードに上のコードを入力します。

custom_snippet1

その後は下にスクロールして、LocationをRun Everywhereにしましょう。全ページで実行したいためこの設定にしています。
ここまで設定出来たらSave Snippetをクリックして保存しましょう。

custom_snippet2

これで特定のカテゴリーを非表示にすることが出来ました!

終わりに

上記の設定をすることでウィジェットの特定のカテゴリーを非表示にすることが出来るようになりました。
functions.phpに追記する方法とWPCodeを使って行う方法の2種類を紹介いたしました。
特にWPCodeを使用した方法は今回以外のコードを任意の場所で実行させるためにも便利なプラグインなため、もし他にこんな方法で利用しているよ、みたいなのがあれば教えていただければ幸いです。

Read more

30389141540_8888175780_b

こんにちは。 今日はWordPressの一部のページをHTTPS接続にすることが出来るプラグイン「WordPress HTTPS (SSL)」を紹介したいと思います。 最近ではウェブサイトの全体をHTTPS化するのが一般的ですが、それでも一部のページのみをHTTPSにしたいという希望は絶えません。 そこでこのプラグインを使えば一部のページのみHTTPSを有効に出来るので色々と捗ります! Continue reading WordPressの一部のページのみをHTTPS接続にするプラグイン「WordPress HTTPS (SSL)」

Read more

29760661056_34d79ed2b2_b

こんにちは。 以前の記事で指定時刻に記事を非公開にしたりカテゴリーを変更出来たりするプラグイン「Post Expirator」を紹介しました。 WordPressで指定時刻に記事を非公開にする「Post Expirator」

ただしこれはデフォルトでは英語です。 なのでこれを日本語化する方法を紹介いたします。 Continue reading WordPressプラグイン「Post Expirator」を日本語化する

Read more

30592266464_b0e3466c74_b

こんにちは。 WordPressのテーマを開発しているときに全てレスポンシブデザインにするのは構わないのですが、場合によってはPCとスマホでソースを全て変えたいときがあると思います。 そんなときにオススメのWordPressプラグインは「Multi Device Switcher」です。 このプラグインのよいところは、場合によってはPCテーマとの切り替えを無効に出来る点です(正規表現も可能) Continue reading PCやスマホでテーマを切り替えるWordPressプラグイン「Multi Device Switcher」

Read more

161202

こんにちは。

WordPressを使っていると、指定した時刻に記事を非公開にしたい!とか指定した時刻に別のカテゴリに変更したい!と 思うこと、よくありますよね。 今回はそのような希望を叶えるWordPressプラグインを紹介したいと思います。

Continue reading WordPressで指定時刻に記事を非公開にする「Post Expirator」

Read more

みなさんこんにちは!

最近はRailsとSwiftで四苦八苦してるたがみです! 久しぶりにCakePHPを触る機会があり、忘れちゃいけないのでブログに残しとこう!と思った次第です。

今回の例は、 あるプロジェクトでcomposerを使ってプラグイン等を管理しているが、過去のプラグインでPackagistに登録されていない。どうやれば解決出来るんだっけ? です!

それではいってみましょう!

Composerでzipを扱う

今回インストールしたかったプラグインはACLをGUIで簡単に確認することが出来るプラグイン「Plugin ACL」です。 とても便利なのですが、DLしてプラグインの中身を見る限り、Packagistに登録されていない?

※9/27 12:30 追記 Packagistに登録されていました!僕の確認ミスです!ただ有志の方が非公式で登録されているようです。 alaxos/acl – Packagist

DLするURLはこちらですが、これをComposerでインストール出来るようにしたいと思います!

ComposerではPackagistに登録されているものも扱えますし、zipでまとめられているプラグインのURLを用いてインストールすることも出来ます。 なので今回は先ほどDLしたURLからインストール出来るようにします。

composer.jsonに以下のように書けばインストール出来ます!

composer.json

{
  "repositories": {
    {
      "type": "package",
      "package": {
        "name": "alaxos/plugin_acl",
        "version": "2.3.0",
        "dist": {
          "url": "http://www.alaxos.org/download/alaxos_acl_2.3.0.zip",
          "type": "zip"
        }
      }
    }
  },
  "require": {
    "alaxos/plugin_acl": "2.3.0"
  }
}

ハイライトしてある6行目の名前をrequireの中の16行目で使用することが出来るんですね! 知ってしまえば簡単なんですが、こういうのって探さないと書けないですよね・・・

皆様の役に立てれば!

最近出たCakePHPでのCIの方法を書いた本 一回目を通さないとなー ちなみに個人的にはCircleCIおすすめです!!

CakePHPで学ぶ継続的インテグレーション
渡辺 一宏 吉羽 龍太郎 岸田 健一郎 穴澤 康裕
インプレス
売り上げランキング: 3,318
Read more

予想以上にドはまりしてもう一生やりたくないよ!ってくらいやりたくないのでここでまとめておきますw

相当ごりごりっと解決してしまったのでもっとスマートにやりたかったんですが、色々検索して出てきたものがことごとくうまくいかなかったのでしょうがないです・・・

流れとしては、

  • $wp_queryを一時保存して、新たにWP_Queryクラスのインスタンスを$wp_queryに上書きする形で作る
  • GETの値を調べる(ページが今何ページか調べる)
  • ページネーションの関数で出力する
  • $wp_queryを元に戻す

なぜ$wp_queryを上書きするかというと、デフォルトで多くの関数が$wp_queryを使用して関数の出力を行っているためです(まぁglobalなんでね)

実行環境としては

  • PHP 5.4.24
  • WordPress 3.6.1

それでは以下コードになります。

functions.php

function bmPageNavi() {
  global $wp_rewrite;
  global $wp_query;
  global $paged;

  $paginate_base = get_pagenum_link(1);
  if (strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()) {
    $paginate_format = '';
    $paginate_base = add_query_arg('page', '%#%');
  } else {
    $paginate_format = (substr($paginate_base, -1 ,1) == '/' ? '' : '/') .
    untrailingslashit('?page=%#%', 'paged');;
    $paginate_base .= '%_%';  
  }

  $result = paginate_links( array(
    'base' => $paginate_base,
    'format' => $paginate_format,
    'total' => $wp_query->max_num_pages,
    'mid_size' => 5,
    'current' => ($paged ? $paged : 1),
  ));

  return $result;
}

 

archive.php

 2,
    'paged' => $paged,
    'post_type'      => your_post_type,
    'orderby'        => 'post_date',
    'order'          => 'DESC'
);
$wp_query->query($param); 

get_header(); ?>
    have_posts() ) : ?>
        have_posts() ) : $wp_query->the_post(); ?>
  
    

 

これで自分の場合ちゃんと動きました!

最後に

WordPressでもよくあるだろうページネーションでこんなに大変な思いをするとは思ってませんでした。 でももともとページネーションは複雑ですししょうがないですよね。最終的にどうにかなってよかったです。

WordPressレッスンブック HTML5&CSS準拠
エビスコム ソシム 売り上げランキング: 10,185
Read more

タイトルとおりのことです。

うまくjoin出来てるはずなのにな〜〜なんでだろうなぁ、sql_dumpでちゃんと思い通りのSQL発行されてるのにな〜なんだろうなぁ・・・と思い、色々optionを指定していたらタイトルとおりのことが出来ていなかったせいで結果が反映されていませんでした。

下記のようなコードを書いた場合はちゃんとfieldsも指定しましょう

$this->User->find('all', [
    'joins' => [
        'comment' => [
            'table' => 'comment',
            'alias' => 'Comment',
            'type' => 'inner',
            'conditions' => [
                'User.id = Comment.user_id'
            ]
        ]
    ],
    'fields' => '*'
]);

これで解決。めでたしめでたし!

参考:http://stackoverflow.com/questions/4354846/cakephp-display-custom-fields-from-array/4355357#4355357

cakePHP2.0のfindでINNER JOINしてもJOINしたテーブルが表示されない

詳解CakePHP辞典―2.0/2.1/2.2/2.3対応
滝下 真玄
秀和システム
売り上げランキング: 91,713
Read more