投稿者: admin

  • Woocommerceでメールのテンプレートを追加する方法

    Woocommerceには標準でメールテンプレートが10通用意されている。
    ※バージョンによって異なるため、要バージョン確認。

    Woocommerceのメールの特徴は、受注のステータスを変更したタイミングで発火し、自動で送信できるという点。
    ちなみに、標準のテンプレートで用意されているのは、注文時に管理者に送られる自動送信メールが1件、キャンセルのタイミングで管理者に送られるメールが1件、注文が失敗したタイミングで送信されるメールが1通。そして各タイミングで顧客に送られるメールが8通。

    メール機能を有効にチェックを入れなければ、送信のタイミングは自由に選ぶことができるため、基本、このデフォルトのメールテンプレートを修正すれば事足りるだろう。

    しかし、状況によっては新たなテンプレートをどうしても追加したいという場合がある。

    Woocommerceでプラグインを使わずにメールテンプレートを追加する方法

    こちらは以下英語のサイトだが詳しく解説されていたので参考にすると良い。

    https://www.skyverge.com/blog/how-to-add-a-custom-woocommerce-email/

    Woocommerceのメールテンプレートを追加できるプラグイン

    Woo Custom Emails

    上記のWP公式プラグインでWoocommerceにメールテンプレートを追加できる。

    ただし、発火のタイミングを選ぶことが必須となっているため、受注ステータスの変更時に送信するメール。というのが基本的な使い方だ。

    ※ステータスを両方同じステータスで指定すれば、自動発火を回避して使用することができるかも知れない。

  • Stripeの日本語マニュアルに関して

    2015年、「日本に上陸」したStripe。

    Stripe

    stripeはいとも簡単にクレジット・カード決済を導入でき、かつ、手数料も業界水準以下、という画期的なサービスだ。

    気になっている開発者も多いはず。

    しかしながら、執筆時現在、ベータ版のみの公開となっており、電話サポートなし、日本語のマニュアルなし。という状態。

    メールで問い合わせたところ、2016年春頃には・・・という回答だったが、期待したところだ。

    さて、それまでの間、最低限業務に必要な箇所のみ日本語に訳し、マニュアルを作成する必要がある。

    ちなみに、受注業務を行うスタッフがメインで使用する箇所は以下の赤枠。

     

    Stripe 日本語マニュアル

    Stripe使用の際に最低限押さえるべき単語

    以下にStripeの日本語マニュアルが公開されるまでの間、最低限必要な英単語を列挙。

    Transaction 決済

    Payments 支払い

    Transfers 振替

    Balance 残高

    Refund 返金

    Capture 決済依頼

    [Googlead]

  • OWL Carousel オウルカルーセルでナビゲーションボタンを横にする方法

    jquery コンテンツスライダーの定番プラグイン「OWL Carousel」。

    OWL Carousel

    レスポンシブ対応の非常に高機能なプラグインだが、そのOWL Carouselでナビゲーションボタンを横にレイアウトするコードのメモ。

    html

    <div class="wrapper-with-margin">
    <div id="owl-demo" class="owl-carousel">
         <div>One</div>
         <div>Two</div>
         <div>Three</div>
         <div>Four</div>
    </div>
    </div>
    

    CSS

    .owl-theme .owl-controls {
      margin-top: 10px;
      text-align: center;
    }
    /* Styling Next and Prev buttons */
    .owl-theme .owl-controls .owl-buttons div {
      color: #FFF;
      display: inline-block;
      zoom: 1;
      *display: inline;
      /*IE7 life-saver */
      margin: 5px;
      padding: 3px 10px;
      font-size: 12px;
      -webkit-border-radius: 30px;
      -moz-border-radius: 30px;
      border-radius: 30px;
      background: #869791;
      filter: Alpha(Opacity=50);
      /*IE7 fix*/
      opacity: 0.5;
    }
    /* Clickable class fix problem with hover on touch devices */
    /* Use it for non-touch hover action */
    .owl-theme .owl-controls.clickable .owl-buttons div:hover {
      filter: Alpha(Opacity=100);
      /*IE7 fix*/
      opacity: 1;
      text-decoration: none;
    }
    /* Styling Pagination*/
    .owl-theme .owl-controls .owl-page {
      display: inline-block;
      zoom: 1;
      *display: inline;
      /*IE7 life-saver */
    }
    .owl-theme .owl-controls .owl-page span {
      display: block;
      width: 12px;
      height: 12px;
      margin: 5px 7px;
      filter: Alpha(Opacity=50);
      /*IE7 fix*/
      opacity: 0.5;
      -webkit-border-radius: 20px;
      -moz-border-radius: 20px;
      border-radius: 20px;
      background: #869791;
    }
    .owl-theme .owl-controls .owl-page.active span,
    .owl-theme .owl-controls.clickable .owl-page:hover span {
      filter: Alpha(Opacity=100);
      /*IE7 fix*/
      opacity: 1;
    }
    /* If PaginationNumbers is true */
    .owl-theme .owl-controls .owl-page span.owl-numbers {
      height: auto;
      width: auto;
      color: #FFF;
      padding: 2px 10px;
      font-size: 12px;
      -webkit-border-radius: 30px;
      -moz-border-radius: 30px;
      border-radius: 30px;
    }
    /* preloading images */
    .owl-item.loading {
      min-height: 150px;
      background: url(AjaxLoader.gif) no-repeat center center
    }
    #owl-demo .owl-item > div img {
      display: block;
      width: 100%;
      height: auto;
      -webkit-border-radius: 3px;
      -moz-border-radius: 3px;
      border-radius: 3px;
      margin-bottom: 4px;
    }
    #owl-demo .owl-item > div {
      background: #42bdc2;
      text-align: center;
      padding: 50px 0px;
      margin: 3px;
      color: white;
      font-size: 32px;
      border: 1px white;
    }
    .wrapper-with-margin {
      margin: 0px 50px;
    }
    .owl-theme .owl-controls .owl-buttons div {
      position: absolute;
    }
    .owl-theme .owl-controls .owl-buttons .owl-prev {
      left: -45px;
      top: 55px;
    }
    .owl-theme .owl-controls .owl-buttons .owl-next {
      right: -45px;
      top: 55px;
    }

    JS

    $(document).ready(function () {
        var carousel = $("#owl-demo");
      carousel.owlCarousel({
        navigation:true,
        navigationText: [
          "<i class='icon-chevron-left icon-white'><</i>",
          "<i class='icon-chevron-right icon-white'>></i>"
          ],
      });
    });

     

  • WordPressで固定ページにログインフォームを設置する方法

    WordPressで固定ページにログインフォームを設置する方法を紹介したいと思う。ちなみに、ただ単に会員制サイトを作成したい場合は、プラグインがオススメだ。ログインフォームや登録画面を任意の固定ページに設置することができる。

    Theme My Login

    しかし状況によってはプラグインを使わずに特定のページにフォームを設置する必要がある場合もある。

    プラグインを使わずに固定ページにログインフォームを設置する方法

    今回のケースは、特定のサービスを提供するページにログインフォームを設置したいというケース。

    資料請求ページ等、通常のログインページとは別のページにログインフォームを設置したい、というような場合はプラグインを使わずにフォームを設置したいものだ。

    ログインフォームを設置する場合の注意点

    WordPress標準仕様に関して注意点がいくつかある。仕様として実現したいのは以下だ。

    1.  ログイン後、ログイン画面があった固定ページにとどまりたい
    2. ログイン失敗 ログインに失敗した場合にその固定ページにエラーメッセージを表示した

    上記の仕様を実現する方法を以下に紹介する。

    まずは基本的な点だが、念のため、

    ユーザーがログインしているかどうかで条件分岐する

    <?php if (current_user_can('administrator')) {  //管理人にのみ表示 ?>
    <?php } else { //ログインしてないユーザー ?>
    <?php } //分岐終了 ?>
    <?php if ( is_user_logged_in() ) {  //ログインユーザー ?>
    <?php } else { //ログインしてないユーザー ?>
    <?php } //分岐終了 ?>

    固定ページにログインフォームを表示

    詳しくは公式ページ参照

    テンプレートタグ/wp login form

    <?php wp_login_form( $args ); ?> 

    ログイン後、固定ページに留まり、ログイン失敗した場合はURLにクエリパラメータを付与

    以下をfunction.phpに挿入。URLにmessage=failed というパラメータを付与できる。、

    add_action('wp_login_failed', 'ez_sparrow_login_failed');
    function ez_sparrow_login_failed($username) {
        $page = $_SERVER['HTTP_REFERER'];
        $failed = '?message=failed';
        if(!empty($page) && !preg_match('/wp-admin/', $page)) {
            if(!preg_match('/message=failed/', $page)) {
                $page .= $failed;
            }
            wp_redirect($page);
        }
    }

    固定ページ側でクエリパラメータに応じて条件分岐

    以下のコードで、クエリパラメータに応じて条件分岐させることができる。

    <?php if( $_GET ["message"] == "failed")  {
    /* URLに?message=failedというパラメータが付与されていた場合 */ ?>
    ここにエラーメッセージ
    <?php } ?>

    [Googlead]

  • Woocommerceでパスワードの強度を弱め、脆弱なパスワードを許可する方法

    Woocommerce2.5から追加されたチェックアウトページのThe password strength meter。

    脆弱なパスワードでのユーザー登録を許さない訳だが、7文字以上で記号を混在させてもうまく登録できない現象に陥った。

    どんなサービスを提供するかにもよるが、現時点で日本人が買物をする際に複雑すぎるパスワードの要求は、逆に機会損失に繋がると判断し、Woocommerceのパスワード強度を弱め、脆弱なパスワードを容認することとした。

    以下のコードをfunction.phpに追加すると、脆弱なパスワードでもユーザー登録が可能になる。

    [Googlead]

    Woocommerceで脆弱強度を弱め、脆弱なパスワードを許可するコード

    function ez_sparrow_remove_password_strength() {
    	if ( wp_script_is( 'wc-password-strength-meter', 'enqueued' ) ) {
    		wp_dequeue_script( 'wc-password-strength-meter' );
    	}
    }
    add_action( 'wp_print_scripts', 'ez_sparrow_remove_password_strength', 100 );
  • Really Simple CSV Importerでエクスポートする方法

    CSVデータで記事やカスタム投稿を一括登録できる「Really Simple CSV Importer」このプラグインのエクスポートバージョンがあれば何でもできてしまう気がするのだが、残念ながら「Really Simple CSV Exporter」は現在公開されていない。

    しかしながら、互換性があるとされている「WP CSV Exporter」というプラグインが開発されている。

    ただ、非常に残念なのはカスタム投稿に対応するバージョンは有料(980円)であること。

    全く良心的なお値段なのだが、プラグインを購入することに抵抗がある方のために、他のプラグインを駆使してCSV形式でエクスポートする方法をご紹介する。

    [Googlead]

    「WP CSV」と「Export to Text」を併用してエクスポート

    「Export to Text」はカスタム投稿にも対応したエクスポート用プラグイン。このプラグインでエクスポートしたファイルをGoogleスプレッドシートに読み込むとエクスポートが完了。

    ただし、この方法ではカスタムフィールドの値が1つのセルに結合されてしまい、調整が必要。

    そこで、「WP CSV」というプラグインでカスタムフィールドをエクスポート

    設定は以下のように設定する。

    Enclosure:を”;”に変更
    フィールド名にcf_カスタムフィールド名

    以上、かなり荒業だが、近いうちに「Really Simple CSV Importer」に完全に対応したエクスポートプラグインが公開されることを願う。

  • WordPressでユーザー権限毎にCSSを出力する方法

    WordPressでユーザー権限毎にCSSで表示内容を変更したい場合、2つの方法が考えられる。

    1.ユーザー権限毎に body にclassをふる

    こちらはユーザー権限毎にclassを出力するということだが、function.php に以下のコードで実現可能だ。

    function add_user_role_class( $admin_body_class ) {
        global $current_user;
        if ( ! $admin_body_class ) {
            $admin_body_class .= ' ';
        }
        $admin_body_class .= 'role-' . urlencode( $current_user->roles[0] );
        return $admin_body_class;
    }
    add_filter( 'admin_body_class', 'add_user_role_class' );
    

     

    [Googlead]

    2.ユーザー権限毎にCSSを出力する

    ちょっとした修正であれば、表示させたいテンプレートに以下のコードでCSSを適用させる事ができる。

    ちなみに以下は投稿者以下には非表示にさせるコード。

    <?php
    if (!current_user_can('level_7')) {
    echo('<style type="text/css">
    .hidden7 {
    display: none;
    }</style>');
    }
    ?>

    上記のコードに加え、投稿者以下に見せたくないコンテンツをhidden7でクラスを指定する。

    [Googlead]

  • カスタム投稿タイプ毎に検索結果を分岐させる方法

    「製品」や「ニュース」といった投稿タイプがあり、各投稿ページやアーカイブページから検索した時に、検索結果を異なるテンプレートで表示させる方法のメモ。

    カスタム投稿タイプ毎に検索結果を分岐させるコード

    [Googlead]

    function.php に以下のコードを追記し、search-投稿タイプ.phpのファイルを用意することで分岐可能。

    // テンプレート読み込みフィルターをカスタマイズする
    add_filter('template_include','custom_search_template');
    function custom_search_template($template){
    	// 検索結果の時
    	if ( is_search() ) {
    		// 表示する投稿タイプを取得する
    		$post_types = get_query_var('post_type');
    		// search-{$post_type}.php の読み込みルールを追加する
    		foreach ( (array) $post_types as $post_type )
    			$templates[] = "search-{$post_type}.php";
    		$templates[] = 'search.php';
    		$template = get_query_template('search',$templates);
    	}
    	return $template;
    }

    [Googlead]

  • WordPressでカスタムフィールドの値でループさせる方法

    カスタムフィールドに任意の値を入れて、ループの条件にカスタムフィールドの値を指定する方法をメモする。

    関連記事で表示する記事を制御したい。といいたケースでも使用できる。もちろんタグを使うこともできるが、カスタムフィールドの値によってループを制御したい時には以下のコードで可能だ。

    カスタムフィールドの値でループさせるコード

    [Googlead]

    <?php
    $args = array(/* 配列に複数の引数を追加 */
    'post_type'=>'post',/*投稿タイプ*/
    'posts_per_page'=>'10',/*投稿表示数*/
    'category_name' => 'カテゴリー',/*カテゴリー*/
    'meta_key' => 'カスタムフィールドのキー',  // カスタムフィールドのキー。
    'meta_value' => array( esc_attr(get_post_meta($post->ID,'カスタムフィールドのキー', true))),
    'orderby' => 'menu_order',
    'order' => 'ASC',
    'paged'=>$paged
    ); ?>
    <?php $my_query = new WP_Query( $args ); ?>

     

  • Wordperssで参照元URLで条件分岐する方法

    参照元のURLによって表示する内容を変えたい。という場合に使えるコードを紹介する。

    [Googlead]

    Wordperssで参照元URLで条件分岐するコード

    <?phpif (strpos($_SERVER[HTTP_REFERER], "参照元URL") == true) {
    echo "表示したい内容";
    }?>