投稿者: admin

  • Redirections プラグインを使ってCSVファイルを元に一括でリダイレクト処理を設定

    http://www.vamban.com/bulk-csv-url-redirections/
    Setup CSV File for Bulk CSV URL redirections

    Create excel file with 4 columns (for simple 301, 302 or 307 redirects) and name the columns as source, target, code, match. In the second row, first column enter source URL you wish to redirect and destination URL in 2nd column / 2nd row. Repeat the steps as illustrated in below sample CSV file and save as .CSV file format. (Don’t save as worksheet)

    テーブルを作る際は列数に注意。

    source:ソースURL(必須)
    target:ターゲットURL(必須)
    regex:正規表現(空欄可;行を設定しない場合のデフォルトは1);正規表現をチェックの場合は1、正規表現をチェックしない場合は空欄
    type:操作(空欄可;行を設定しない場合のデフォルトはURL)
    code:操作(空欄可;行を設定しない場合のデフォルトは301)
    match:一致条件(空欄可;行を設定しない場合のデフォルトはURL)
    hits:転送数(空欄可);通常はここは空欄
    title:説明?(空欄可)

    source target code match
    /old-url-1/ www.url.com/new-url-1/ 301 url
    /old-url-2/ www.url.com/new-url-2/ 301 url
    /old-url-3/ www.url.com/new-url-3/ 302 url
    /old-url-4/ www.url.com/new-url-4/ 307 url
    /old-url-5/ www.url.com/new-url-5/ 302 url
  • phpmyadmin で主導でカテゴリーをmarge(結合)させる

    UPDATE wp_term_relationships
    SET term_taxonomy_id =
       (SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE term_id = ここに結合先のtagID)
    WHERE term_taxonomy_id =
       (SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE term_id = ここに結合元のtagID)

    上記コードをSQLで実行するとカテゴリーを結合できる。

    ただし、投稿一覧のカウント数には反映されない。

  • phpMyAdminで特定の文字が入っているカスタムフィールドを抽出し置換する

    1. phpMyAdminでログインしバックアップを取る
    2. wp_postmetaテーブルを選択した後検索タブをクリック
    3. meta_valueに検索する値を入れ実行(キーワードを%で囲う、もしくは用意されている演算子を使用する)
    4. 検索結果のすべてにチェックを入れてエクスポートをクリック
    5. MS Excel 用の CSVにチェックを入れる
    6. 1 行目にフィールド名を追加するにチェックを入れ、実行
    7. ダウンロードされたCSVをスプレッドシートで読み込みインポートプラグインを使ってインポート

    ※wp-config で使用しているデータベースの情報を閲覧できる

     

  • phpmyadminからwordpressの下書き(draft)やゴミ箱を空にする方法

    下書きやゴミ箱に入った投稿を一括で削除できるプラグインは存在するが、投稿数が多いとエラーになってしまうという場合がある。

    そんな時はphpmyadminで削除する方法がお勧めだ。

    phpmyadminからwordpressの下書き(draft)を空にする方法

    以下のコードで削除できる

    DELETE a , b , c FROM wp_posts a
    LEFT JOIN wp_term_relationships b ON ( a.ID = b.object_id )
    LEFT JOIN wp_postmeta c ON ( a.ID = c.post_id )
    WHERE a.post_type = 'post' AND a.post_status = 'draft';

     

    phpmyadminからwordpressのゴミ箱を空にする方法

    以下のコードで削除できる

    DELETE a , b , c FROM wp_posts a
    LEFT JOIN wp_term_relationships b ON ( a.ID = b.object_id )
    LEFT JOIN wp_postmeta c ON ( a.ID = c.post_id )
    WHERE a.post_type = 'post' AND a.post_status = 'trash';

     

  • WordPressでループを入れ子にする方法

    例えば2つの投稿タイプ、製品(product)と納入事例(case)があり、単純に、あるタクソノミーに属する製品をループで回して一覧表示するのは、ごくごく簡単なことだ。

    今回実現したいのは、ループで回した製品(product)毎に、その製品の納入事例(case)を表示させるというケース。

    つまり、ループを入れ子で使いたいのだ。または二重ループ多重ループというのだろうか。

    そして、さらに言うと、製品と納入事例は同じカスタム分類(タクソノミー)で紐付いており、その値を取得してループに使用したい。

    さらに言うと、それを固定ページのテンプレートで管理し、固定ページのカスタムフィールドの値でタクソノミーを指定することで、作業を簡略化したい。

    以下で実現できたので、コードを整えてメモしておく。

    <?php
    ////親ループ
    	$parm = array(
    	'post_type' => '投稿タイプ',
    	'tax_query' => array(
    				array(
    					'taxonomy' => esc_attr(get_post_meta($post->ID,'カスタムフィールド', true)),//カスタムフィールドでタクソノミーを指定
    					'field' => 'slug',//カスタムフィールドをスラッグで指定するかIDで指定するか
    					'terms' =>  esc_attr(get_post_meta($post->ID,'カスタムフィールド', true)),//カスタムフィールドでタームを指定
    					),
    				),
    	'showposts' => 4
    	);
    	$my_query = new WP_Query($parm);
    ?>
    <?php if($my_query->have_posts()): ?>
    <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
    <!--ループの内容-->
    <?php
    //親ループで回した投稿から取得するタームのタクソノミーを指定 
    	$terms = get_the_terms($post->ID,'タクソノミー');
    	foreach($terms as $term){//タームのスラッグを取得
    		$term_slug = $term -> slug;
    		}
    // カスタムフィールドで関連付けたければ $term_slug = get_post_meta($post->ID,'カスタムフィールド',TRUE);
    ?>
    				<?php
    				////子ループ
    				$parm = array(
    				'post_type' => '投稿タイプ',
    				'tax_query' => array(
    							array(
    								'taxonomy' => 'タクソノミー',
    								'field' => 'slug',
    								'terms' => $term_slug,
    								),
    							),
    				'showposts' => 4
    				);
    				$sub_query = new WP_Query($parm);
    				// カスタムフィールドで関連付けたければ meta_key' => 'カスタムフィールドの値', 'meta_value' => $term_slug,
    				?>
    				<?php if($sub_query->have_posts()): ?>
    				<?php while ($sub_query->have_posts()) : $sub_query->the_post(); ?>
    				<!--ループの内容-->
    				<?php endwhile; ?>
    				<?php endif;
    				////子ループここまで
    				?>
    <?php endwhile; ?>
    <?php endif;
    ////親ループここまで
    ?>
    

    上記のコードを応用して、カスタム投稿タイプsiteとlinkを作成し、サイトごとにリンクリストを作成するコードを以下に紹介。

    <?php
    	////親ループ
    		$parm = array(
    		'post_type' => 'site',
    		'orderby' => 'menu_order',
    		'order'   => 'ASC',
    		'showposts' => -1
    		);
    		$my_query = new WP_Query($parm);
    	?>
    	<?php if($my_query->have_posts()): ?>
    	<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
    <dl class="clearfix">
    <dt><a href="<?php echo $post->link_url; ?>" target="_blank" title="<?php echo $post->link_title; ?>"><?php the_title(); ?></a></dt>
    <dd><?php
    		$cflsn = get_post_meta($post->ID,'link_site_name',TRUE);
    	// カスタムフィールドlink_site_nameの値を格納
    	?>
    <?php
    					////子ループ
    					$parm = array(
    					'post_type' => 'link',
    					'meta_key' => 'link_site_name',
    					'meta_value' => $cflsn,
    					'orderby' => 'menu_order',
    					'order'   => 'ASC',
    					'showposts' => -1
    					);
    					$sub_query = new WP_Query($parm);
    					// カスタムフィールドlink_site_nameでサイト名を取得し同じサイト名のリンクを吐き出す
    					?>
    					<?php if($sub_query->have_posts()): ?>
    					<?php while ($sub_query->have_posts()) : $sub_query->the_post(); ?>
    	<a href="<?php echo $post->link_url; ?>" target="_blank" title="<?php echo $post->link_title; ?>"><?php the_title(); ?></a>
    					<?php endwhile; ?>
    					<?php endif;
    					////子ループここまで
    					?>
    </dd>
    </dl>
    	<?php endwhile; ?>
    	<?php endif;
    	////親ループここまで
    	?>

    以下の様なデータをcsvで管理し、インポート機能を使えば処理も簡単だ。

    ID

    post_status

    post_type

    link_site_name

    link_title

    post_title

    link_url

    menu_order

     

    publish

    site

    サイト名

    対策キーワード

    リンクテキスト

    リンクURL

    1

     

    publish

    link

    サイト名

    対策キーワード

    リンクテキスト

    リンクURL

     

  • WoocommerceとContactform7を連携させてユーザー情報を自動入力させる

    Woocommerce会員がログインしている状態で、資料請求や、見積依頼等を行う場合、フォームに会員情報が自動で入力されている状態が好ましい。

    WoocommerceとContactform7を連携させてユーザー情報を自動入力させる方法を紹介したいと思う。

    今回自動入力させたい項目は以下。

    • 会社名*別途カスタマイズ
    • 電話番号
    • 郵便番号
    • 市区町村
    • 住所1
    • 住所2
    function wpcf7_form_tag_filter($tag){
        if(is_admin() || !is_array($tag)) return $tag;
        $name = $tag['name'];
        $user = wp_get_current_user();
        if($user) {
    		if($name == 'billing_company') { $tag['values'] = (array) $user->billing_company; }
    		if($name == 'billing_last_name') { $tag['values'] = (array) $user->billing_last_name; }
    		if($name == 'billing_first_name') { $tag['values'] = (array) $user->billing_first_name; }
    		if($name == 'billing_phone') { $tag['values'] = (array) $user->billing_phone; }
    $pref = array(
    		"JP01"=>"北海道", "JP02"=>"青森県", "JP03"=>"岩手県", "JP04"=>"宮城県", "JP05"=>"秋田県", "JP06"=>"山形県", "JP07"=>"福島県", "JP08"=>"茨城県", "JP09"=>"栃木県", "JP10"=>"群馬県", "JP11"=>"埼玉県", "JP12"=>"千葉県", "JP13"=>"東京都", "JP14"=>"神奈川県", "JP15"=>"新潟県", "JP16"=>"富山県", "JP17"=>"石川県", "JP18"=>"福井県", "JP19"=>"山梨県", "JP20"=>"長野県", "JP21"=>"岐阜県", "JP22"=>"静岡県", "JP23"=>"愛知県", "JP24"=>"三重県", "JP25"=>"滋賀県", "JP26"=>"京都府", "JP27"=>"大阪府", "JP28"=>"兵庫県", "JP29"=>"奈良県", "JP30"=>"和歌山県", "JP31"=>"鳥取県", "JP32"=>"島根県", "JP33"=>"岡山県", "JP34"=>"広島県", "JP35"=>"山口県", "JP36"=>"徳島県", "JP37"=>"香川県", "JP38"=>"愛媛県", "JP39"=>"高知県", "JP40"=>"福岡県", "JP41"=>"佐賀県", "JP42"=>"長崎県", "JP43"=>"熊本県", "JP44"=>"大分県", "JP45"=>"宮崎県", "JP46"=>"鹿児島県", "JP47"=>"沖縄県",
    		);
    		$getuserstate = $user->billing_state;
    		if($name == 'billing_state') { $tag['values'] = (array) $pref[$getuserstate]; }
    		if($name == 'billing_postcode') { $tag['values'] = (array) $user->billing_postcode; }
    		if($name == 'billing_city') { $tag['values'] = (array) $user->billing_city; }
    		if($name == 'billing_address_1') { $tag['values'] = (array) $user->billing_address_1; }
    		if($name == 'billing_address_2') { $tag['values'] = (array) $user->billing_address_2; }
        }
        return $tag;
    }
    add_filter('wpcf7_form_tag', 'wpcf7_form_tag_filter', 11);
    

    上記のポイントは「県」がコードで表示されてしまうのを防ぐため以下のコードを使用していることだ。

    $pref = array(
    		"JP01"=>"北海道", "JP02"=>"青森県", "JP03"=>"岩手県", "JP04"=>"宮城県", "JP05"=>"秋田県", "JP06"=>"山形県", "JP07"=>"福島県", "JP08"=>"茨城県", "JP09"=>"栃木県", "JP10"=>"群馬県", "JP11"=>"埼玉県", "JP12"=>"千葉県", "JP13"=>"東京都", "JP14"=>"神奈川県", "JP15"=>"新潟県", "JP16"=>"富山県", "JP17"=>"石川県", "JP18"=>"福井県", "JP19"=>"山梨県", "JP20"=>"長野県", "JP21"=>"岐阜県", "JP22"=>"静岡県", "JP23"=>"愛知県", "JP24"=>"三重県", "JP25"=>"滋賀県", "JP26"=>"京都府", "JP27"=>"大阪府", "JP28"=>"兵庫県", "JP29"=>"奈良県", "JP30"=>"和歌山県", "JP31"=>"鳥取県", "JP32"=>"島根県", "JP33"=>"岡山県", "JP34"=>"広島県", "JP35"=>"山口県", "JP36"=>"徳島県", "JP37"=>"香川県", "JP38"=>"愛媛県", "JP39"=>"高知県", "JP40"=>"福岡県", "JP41"=>"佐賀県", "JP42"=>"長崎県", "JP43"=>"熊本県", "JP44"=>"大分県", "JP45"=>"宮崎県", "JP46"=>"鹿児島県", "JP47"=>"沖縄県",
    		);
    		$getuserstate = $user->billing_state;

    参考記事

  • Woocommerceで国を削除するフィルターフック

    Woocommerceで国を削除する方法に関するメモ。

    Woocommerceは様々な国からの注文に対応しているため、標準で「国」を選べるような仕様になっているが、日本国内で使用する場合は、逆にこの設定が邪魔となる。

    ただ単純に見えないようにするならばCSSで非表示にしてしまうのも手だが、フィルターフックで非表示にする方法を以下に紹介する。

    Woocommerceで国を削除する方法

    add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
    add_filter( 'woocommerce_billing_fields' , 'custom_override_billing_fields' );
    add_filter( 'woocommerce_shipping_fields' , 'custom_override_shipping_fields' );
    function custom_override_checkout_fields( $fields ) {
      unset($fields['billing']['billing_country']);
      unset($fields['shipping']['shipping_country']);
      return $fields;
    }
    function custom_override_billing_fields( $fields ) {
      unset($fields['billing_country']);
      return $fields;
    }
    function custom_override_shipping_fields( $fields ) {
      unset($fields['shipping_country']);
      return $fields;
    }
    

    「国フィールド」は請求先や送付先にも表示されるため、上記のようなコードが必要になる。

  • WordPressで固定ページにタグをつけ、同じタグのついたページを関連ページとして紐づけし表示させる

    WordPressで固定ページにタグ付けし、任意のページにそのページと同じタグの付いたページを関連ページとして表示させる方法を紹介する。

    例えば、赤ワインというページに「ワイン」とタグ付けし、同じタグの付いたページを、赤ワインページに表示させたいという場合だ。これを固定ページで実現するためにはまず、固定ページでもタグ機能を使えるできるようにする必要がある。

    固定ページでタグを使えるようにする

    以下のコードをfunction.phpに追記

    function add_tag_to_page() {
    register_taxonomy_for_object_type('post_tag', 'page'); }
    add_action('init', 'add_tag_to_page');

    続いて、要となる同じタグでループを回すコード。

    同じタグのついた固定ページを関連ページとして表示するコード

    <?php
      $original_post = $post;
      $tags = wp_get_post_tags($post->ID);
      $tagIDs = array();
      if ($tags) {
        $tagcount = count($tags);
        for ($i = 0; $i < $tagcount; $i++) {
          $tagIDs[$i] = $tags[$i]->term_id;
      }
      $args=array(
      'tag__in' => $tagIDs,//指定した複数のタグ(表示するページのタグ) のいずれかを含む投稿のみを表示
    	  'post__not_in' => array($post->ID),//表示中のページを除外
    	  'posts_per_page'=>'12',//投稿表示数
    	  'post_type' => 'page',//投稿タイプ array('post','page')なども使える
    	  'orderby'    => 'menu_order',//並び順
    	  'order'      => 'ASC'//降順か昇順か
      );
      $my_query = new WP_Query($args);
      if( $my_query->have_posts() ) {  ?>
    <?php while ($my_query->have_posts()) : $my_query->the_post();//ループのスタート ?>
    <?php endwhile; wp_reset_query(); ?>
    <?php } else { ?>
    <?php } }?>

    さらに、応用編で固定ページに任意のカスタフィールドの値で、関連ページとして表示させるかを選択したい、というケース。

    固定ページでタグ+カスタムフィールドの値で条件分岐させ関連ページとして表示する

    上記のコードに以下を追加すればOK。

    	  'order'      => 'ASC',//降順か昇順か
    	  'meta_key' => 'カスタムフィールド名',//指定したカスタムフィールド
    	  'meta_value' => 'カスタムフィールドの値',//上記カスタムフィールドの値
  • Stripe導入時の注意点JCBに対応せず

    執筆現在、日本ではStripeのベータ版のみが提供されている。

    この時期に導入を検討している場合の注意点は2点。

    1、日本語マニュアル等の用意はなく、メール対応のみ

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

    2、JCBに対応していない

    Which cards and payment types can I accept with Stripe?

    Australian, Canadian, European, and Japanese businesses can accept Visa, MasterCard, and American Express.

    日本語マニュアルに関しては時期は準備中とのことで、2016年内を期待したい。

    2018年7月24日追記:審査が別途あるがJCB対応を開始している
    https://support.stripe.com/questions/jp-jcb

  • Woocommerceで送信メールをプレビューで確認する方法

    How to preview Woocommerce mails. you can do that with plugin 「WooCommerce Email Test.」

    注文内容などが自動で挿入されたメールテンプレート利用して一部編集して送信。ということをフロントエンドで行いたい。というケース。

    1つのアイデアとして、プレビュー機能を使って、受注の内容を吐き出し、それをメーラーに貼り付けて送信。という、やや原始的な方法が一番汎用性が高いのではと思い、Woocommerceの送信メールをプレビューできるプラグインを幾つか試してみた。

    WooCommerce Email Test

    こちらはその名の通りこれから送るメールをブラウザでテストできるプラグイン。使い勝手が良いのだが、htmlバージョンのメールにしか対応していない。

    海外ではもはやhtmlメールが標準となっているのだろうか・・・・

    日本ではまだまだガラケーを含め、htmlに対応していないデバイスを完全に無視することはできない状況がある。以下の記事でも取り上げられているが、かなり複雑化している現実がある。

    http://webcas.azia.jp/email/knowhow/smartphone_mailmag.html