カテゴリー: WordPress

  • 割引について

    「Discount Rules for WooCommerce」プラグインの無料版とPro版の主な違いは、割引ルールの複雑さと対象範囲の柔軟性です。

    以下に無料版とPro版の具体的な違いを整理します。


    ✅ 無料版でできること(基本的な割引)

    機能説明
    数量ベースの割引(ボリュームディスカウント)「5個以上で10%オフ」など
    固定額 or パーセンテージ割引「10%オフ」「500円オフ」など
    商品単位・カテゴリー単位での割引「Tシャツカテゴリを2枚以上で割引」など
    サブトータル条件の割引「合計金額1万円以上で割引」など
    割引バッジの表示商品に「10%オフ」などバッジ表示可能

    💡 Pro版で追加される主な機能

    Pro版機能説明
    顧客の役割に応じた割引会員、一般、卸売などユーザータイプごとに割引条件設定可能
    特定のユーザー / ログインユーザー限定割引「ログインしているユーザーのみ割引」など
    クーポンと割引の併用制御クーポンコードとの併用可否設定可能
    初回購入者限定割引「初めて購入したユーザーだけ対象」など
    カートアイテム組み合わせ条件「商品A + 商品Bがある場合だけ割引」など複合条件
    購入履歴に基づいた割引「過去に◯◯を買った人だけ」など
    スケジュール設定「〇月〇日~〇日まで割引」など期間指定
    送料無料の自動適用割引ルールに応じて送料無料を設定可能
    自動追加ギフト商品(BOGO)「1つ買ったら1つ無料」などのBuy X Get Y
    多段階割引(段階的な割引)例:1~4個→0%、5~9個→10%、10個以上→20% など
    割引ルールの優先順位設定複数割引ルールの競合を明確に制御

    ✅ 価格

    2025年時点の参考価格(公式サイト):

    • Pro版:\$59/年(1サイト)
    • 無料版:機能制限あり(上記基本割引機能のみ)

    結論(要点まとめ)

    • 単純な数量割引・カテゴリ割引 → 無料版で十分
    • 顧客別、複合条件、期間設定、ギフトなどが必要 → Pro版が必須
  • WooCommerce

    CSVは、UTF-8で読み込む方がいい
    配送は全削除(サイズ・重量・距離により変わるため、事業所より連絡)

    商品ページのタイトルをXLサイズに変更
    マイアカウントは作らない(サーバーに保存することがないようにする)
    ショップページを商品一覧に変更

    プラグイン

    Perfect Brands WooCommerce

    XO Event Calendar

  • CSV出力

    php出力処理、他にも使えそうなので、サンプルとして残す

    /**
     * 文字列の配列の配列をCSV出力する
     *
     * この関数は、文字列の配列を複数持つ配列(2次元配列)を受け取り、
     * それをCSV形式で出力します。
     *
     * @param string $filename ファイル名
     * @param array $records 文字列を要素とする配列の配列
     */
    function csv_download($filename, $records) {
        // 出力情報の設定
        header("Content-Type: application/octet-stream");
        header("Content-Disposition: attachment; filename={$filename}");
        header("Content-Transfer-Encoding: binary");
    
        // 出力バッファを開始
        ob_start();
        // もし他の部分で余計なデータが出力されていた場合にクリアする
        ob_clean(); // ここで出力バッファをクリアする場合
    
        // ベースとなるデータを作成
        $buffer = "";
        foreach($records as $record) {
            $buffer.= '"' . implode('","', $record) . '"'. "\r\n";
        }
    
        $buffer = mb_convert_encoding($buffer, "SJIS-win", "auto");
    
        echo $buffer;
        // 出力バッファの内容を終了して送信
        ob_end_flush();
        exit;
    
    }
    
  • 画像検索

    WordPressでメディアライブラリにある画像の検索に戸惑ったので記す。
    状態の設定 ‘post_status’ を’any’ 指定することが大事

    $searchstring = "検索文字列";
    
    $images = [];
    // メディアライブラリ内でファイルを検索
    $args = array(
        'post_type'      => 'attachment',   // メディアファイルを検索
        'post_mime_type' => 'image',        // 画像のみ
        'posts_per_page' => -1,             // すべての結果を取得
        'post_status'     => 'any', // すべての状態(公開、非公開、ドラフト、等)
        'meta_query' => array(
            array(
                'key'     => '_wp_attached_file',  // メディアファイルのファイル名
                'value'   => $searchstring,        // 検索したいファイル名の部分文字列
                'compare' => 'LIKE'                // 部分一致検索
            )
        )
    );
    
    $query = new WP_Query($args);
    // クエリ出力(デバッグ用)
    echo $query->request;  // 実際に生成されるSQLを確認
    
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            // ファイルパスの取得
            $file_path = wp_get_attachment_url(get_the_ID());
            $images[] = $file_path;  // ファイルパスを配列に追加
        }
        // ファイルパス順に並べ替え(自然順)
        usort($images, function ($a, $b) {
            return strcmp(basename($a), basename($b));  // ファイル名の部分で比較
        });
    } else {
        echo '該当する画像はありません。';
    }
    
    wp_reset_postdata();
    

  • 画像検索

    メディアライブラリの画像を検索する際、完全一致だけでなく、部分一致曖昧検索なども可能です。WP_Queryを使うことで、柔軟に検索条件を変更できます。

    1. 完全一致の検索

    これは画像タイトルやタグなどに対して完全一致で検索する場合です。

    $args = array(
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'posts_per_page' => -1,
        's' => '検索キーワード'  // 完全一致でタイトルや説明に一致するものを検索
    );
    $query = new WP_Query($args);

    この's'引数は、画像のタイトル説明post_titlepost_excerpt)に基づいて検索されます。

    2. 部分一致の検索

    WP_Querys引数は部分一致にも対応しています。例えば、検索キーワードが「cat」だとしたら、タイトルや説明に「cat」が含まれている画像をすべて取得できます。

    $args = array(
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'posts_per_page' => -1,
        's' => 'cat'  // 部分一致検索
    );
    $query = new WP_Query($args);

    このように、完全一致だけでなく、部分一致でも検索可能です。

    3. カスタムフィールドやタグで検索

    画像にカスタムフィールドタグが設定されている場合、meta_querytax_queryを使って検索を絞り込むことができます。

    例:タグで部分一致検索

    $args = array(<br>    'post_type' => 'attachment',<br>    'post_mime_type' => 'image',<br>    'posts_per_page' => -1,<br>    'tax_query' => array(<br>        array(<br>            'taxonomy' => 'post_tag',<br>            'field'    => 'name',<br>            'terms'    => 'cat', // タグに「cat」を含む画像を検索<br>            'operator' => 'LIKE', // 部分一致<br>        ),<br>    ),<br>);<br>$query = new WP_Query($args);

    例:カスタムフィールドで部分一致検索

    $args = array(
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key'     => 'custom_field_key',  // カスタムフィールド名
                'value'   => 'cat',  // カスタムフィールドの値(部分一致)
                'compare' => 'LIKE',  // 部分一致
            ),
        ),
    );
    $query = new WP_Query($args);

    4. 他の検索条件の追加

    さらに、画像のアップロード日カテゴリーを条件に加えて絞り込むこともできます。例えば、特定の期間にアップロードされた画像を検索する場合は、date_queryを使用できます。

    $args = array(
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'posts_per_page' => -1,
        'date_query' => array(
            array(
                'after' => '2025-01-01', // 2025年1月1日以降の画像
            ),
        ),
    );
    $query = new WP_Query($args);

    部分一致検索は十分に可能ですし、さらにカスタムフィールドやタグを使った検索を加えることで、非常に柔軟な検索機能を実装できます。WP_Queryの柔軟性を活かして、必要に応じて条件を追加・調整できますので、特定のニーズに合わせた検索機能を実装できます。

  • メディア保存先を変更

    メディア保存先は通常、uploads/年/月になる
    そうならないようにするにはどうすればよいか

    function custom_upload_directory($uploads) {
        $custom_dir = WP_CONTENT_DIR . '/custom-uploads'; // 新しいディレクトリ(例: wp-content/custom-uploads)
    
        $uploads['path'] = $custom_dir;
        $uploads['url'] = content_url('custom-uploads');
        $uploads['subdir'] = '';
        
        return $uploads;
    }
    add_filter('upload_dir', 'custom_upload_directory');
    


  • 在庫管理できるのか

    WordPressで在庫管理はできるのか

    WP Inventory Manager というプラグインがあるのでテスト使用してみる

    使用方法は下記を参照

    設定

    プラグインを作る方がいいかな

    CSVを読み込めるようにしたほうがいい

    商品コード:
    メーカー:
    商品名:
    商品状態:
    取扱店舗:この商品は、〇〇店で取り扱っています

    ■ 有効時に
    カテゴリー[店舗名]を追加
    パーマネントリンク構造を変更

    商品画像を選択するにはどうすればいいの?

    WordPressの自作プラグインで画像選択して使用したい

    中立的な見地のないジャーナリストの存在価値って何だろう
    仮に達成できなかったとしても、貫き通さなければならない部分な訳よ
    妥協をしてはならない部分だろ
    働いて金を稼ぐ何が悪いんだろう。老害死すべし


    投稿処理

    // 投稿処理
    function handle_custom_post_submission() {
        if (isset($_POST['custom_post_submit'])) {
            // セキュリティチェック
            if (!isset($_POST['custom_post_nonce']) || !wp_verify_nonce($_POST['custom_post_nonce'], 'custom_post_action')) {
                return;
            }
    
            if (!current_user_can('publish_posts')) {
                return;
            }
    
            // 入力を取得
            $title = sanitize_text_field($_POST['custom_post_title']);
            // 商品説明
            $content = wp_kses_post($_POST['custom_post_content']);
            // 商品コード
            $slug = sanitize_text_field($_POST['custom_post_code']);
            $store_category = sanitize_text_field($_POST['store_category']);  // 店舗カテゴリー(例: '新宿店')
            
            // 店舗名(親カテゴリー)を取得
            $parent_category = get_term_by('slug', 'store', 'category');
            // 親カテゴリーが存在する場合
            if ($parent_category) {
                // 子カテゴリーのIDを取得
                $child_category = get_term_by('name', $store_category, 'category');
                
                // 子カテゴリーが見つかれば、そのIDをカテゴリーに設定
                if ($child_category) {
                    $categories = array($child_category->term_id);
                } else {
                    $categories = array(); // 子カテゴリーが見つからない場合は空にする
                }
            } else {
                $categories = array();  // 親カテゴリーが見つからない場合は空にする
            }
    
            // 投稿作成
            $post_data = array(
                'post_title'   => $title,
                'post_content' => $content,
                'post_status'  => 'publish',
                'post_author'  => get_current_user_id(),
                'post_category' => $categories,  // カテゴリーを設定
                'post_name'     => sanitize_title($slug),  // スラッグを設定
            );
    
            wp_insert_post($post_data);
    
            // リダイレクトして再投稿を防ぐ
            wp_redirect(admin_url('admin.php?page=stock-items&success=1'));
            exit;
        }
    }
    add_action('admin_init', 'handle_custom_post_submission');
    
  • ブロックテーマ

    ブロックテーマを作る

  • 初期設定ですべきこと

    • パーマリンク設定

    個人的に気に入っているプラグイン

    • Highlighting Code Block

  • テーマ作成

    WordPress でテーマを自作する際に必要なものについて、重要なファイルや知識、手順を整理してお伝えします。


    WordPress テーマを自作するために必要なもの

    1. 必須ファイル

    WordPress テーマとして機能するには、最低限以下の2つのファイルが必要です。

    a. style.css

    • テーマのスタイルシート。
    • 必須ヘッダーコメント(テーマ情報)を記述する必要があります。
    /*
    Theme Name: My Custom Theme
    Theme URI: https://example.com/my-custom-theme
    Author: Your Name
    Author URI: https://example.com
    Description: A custom WordPress theme created for learning purposes.
    Version: 1.0
    License: GNU General Public License v2 or later
    License URI: https://www.gnu.org/licenses/gpl-2.0.html
    Text Domain: my-custom-theme
    */

    b. index.php

    • WordPress テンプレート階層で最終的に利用されるファイル。
    • 例:
    <!DOCTYPE html>
    <html <?php language_attributes(); ?>>
    <head>
      <meta charset="<?php bloginfo( 'charset' ); ?>">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title><?php bloginfo( 'name' ); ?></title>
      <link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>">
      <?php wp_head(); ?>
    </head>
    <body <?php body_class(); ?>>
      <h1><?php bloginfo( 'name' ); ?></h1>
      <p><?php bloginfo( 'description' ); ?></p>
      <?php wp_footer(); ?>
    </body>
    </html>
    

    2. 推奨ファイル

    テーマをより実用的にするために、以下のファイルを追加するのが一般的です。

    a. header.php

    • ヘッダー部分のテンプレート。
    • <?php get_header(); ?> を使って他のテンプレートから呼び出されます。

    b. footer.php

    • フッター部分のテンプレート。
    • <?php get_footer(); ?> を使って他のテンプレートから呼び出されます。

    c. functions.php

    • テーマに機能を追加するためのファイル。
    • 例:テーマサポートやウィジェットエリアの登録。

    d. single.php

    • 投稿(ブログ記事)を表示するテンプレート。

    e. page.php

    • 固定ページを表示するテンプレート。

    f. archive.php

    • カテゴリーやタグなどのアーカイブページを表示するテンプレート。

    g. 404.php

    • 存在しないページにアクセスされたときに表示するテンプレート。

    3. フォルダ構成

    基本的なフォルダ構成例:

    /my-custom-theme/
    │
    ├── style.css         # テーマ情報とスタイル
    ├── index.php         # メインテンプレート
    ├── header.php        # ヘッダー
    ├── footer.php        # フッター
    ├── single.php        # 投稿ページテンプレート
    ├── page.php          # 固定ページテンプレート
    ├── archive.php       # アーカイブテンプレート
    ├── 404.php           # エラーページ
    ├── functions.php     # 機能追加
    └── /assets/          # 画像、CSS、JavaScript などのリソース
        ├── css/
        ├── js/
        └── images/

    4. 必須知識

    • HTML:
    • テンプレートの基本構造を作るために必要。
    • CSS:
    • サイトのデザインを整えるために必須。
    • PHP:
    • WordPress のテンプレートタグやカスタム機能を実装するために必要。
    • 例: <?php echo bloginfo( 'name' ); ?> でサイト名を表示。
    • WordPress テンプレート階層:
    • 各ページで使用されるテンプレートファイルを理解する。
    • 例:single.php → 投稿ページ、archive.php → カテゴリー一覧など。
    • JavaScript(任意):
    • 動的な動きをつけたい場合に利用。

    5. 開発環境

    • ローカル環境
    • WordPress をインストールしてテストできる環境を準備する。
    • 推奨ツール:XAMPP, Local by Flywheel, Docker など。
    • コードエディタ
    • Visual Studio Code や PhpStorm が便利。
    • ブラウザデベロッパーツール
    • デザインや動作を調整する際に役立ちます。

    6. カスタマイズ

    テーマをオリジナルにするために以下を検討してください。

    1. カスタムメニュー:
    • functions.php に登録。
    • 例:
      php function register_my_menu() { register_nav_menu('primary', __('Primary Menu')); } add_action('init', 'register_my_menu');
    1. カスタムウィジェットエリア:
    • ウィジェットをテーマ内に表示。
    1. レスポンシブデザイン:
    • CSS メディアクエリを使用。
    1. テンプレートパーツの分割:
    • get_template_part() を使って、コードを再利用しやすくする。

    7. デバッグと検証

    • デバッグモード:
    • wp-config.php でデバッグモードを有効にする:
      php define('WP_DEBUG', true);
    • W3C Validator:
    • HTML の構文チェック。
    • WordPress のテーマ検証:
    • Theme Check プラグインで検証。

    8. 画像

    screenshot.png (サイズ 1200x900px)