WordPressでカスタムメニュー機能のまとめ

メニューの有効化

functions.phpなどに記載する。

add_theme_support( 'menus' );

li要素だけを出力

header.phpなどのテンプレートに記載する。

<div id="menu">
	<ul class="menu__list">
		<?php
		$li_only = array(
			'container' => '',//<div>を出力しない
			'items_wrap' => '%3$s',//<ul>を出力しない
		);
		wp_nav_menu($li_only);
		?>
	</ul>

</div>

全ての設定項目

<?php
$defaults = array(
	'menu'            => '',
	'menu_class'      => 'menu',
	'menu_id'         => '{メニューのスラッグ}-{連番}',
	'container'       => 'div',
	'container_class' => 'menu-{メニューのスラッグ}-container',
	'container_id'    => '',
	'fallback_cb'     => 'wp_page_menu',
	'before'          => '',
	'after'           => '',
	'link_before'     => '',
	'link_after'      => '',
	'echo'            => true,
	'depth'           => 0,
	'walker'          => '',
	'theme_location'  => '',
	'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>',
);
wp_nav_menu( $defaults );
?>

テンプレートタグ/wp nav menu – WordPress Codex 日本語版

メニューの登録

functions.phpなどに記載する。

register_nav_menu('main_menu','Main menu');

関連URL

WooCommerceでカート情報から見積もりメールを送らせる方法の思案

現在進行中のWooCommerce案件でタイトルのように、カートからアイテム情報を引っ張ってwp_mailを使って送る必要があり、技術顧問的な知人に相談してある程度方法と考えがまとまったので備忘録。

要件

  • ボタンをクリックしたらページ遷移なしにメールを送信
  • 見積もり番号をインクリメントしてユニークなものを付与する

実装

まずはbuttonにカスタムデータ属性でorderから情報をひっぱって格納する。


<button data-first-name="susumu" data-family-name="seino"></button>

もしくはJSで.cartitemを持ってきて配列のけつに継ぎ足して、ajaxで別途作成したmail.phpにリクエストを送って、PHPを実行する。

$('button').click(function(){
    var items = [];
    $('.cartitems li').each(function(){
        items.push({
            
        })
    });
    
    console.log(items);
       
    var firstName = $(this).attr('data-first-name')
    jQuery.ajax({
        type: "POST",
        url: 'mail.php'
        data: {
            first_name: firstName,
            items: items
        }
    });
});

ほんでmail.phpで.cartitemの情報を受け取ってあとは適宜当てはめてwp_mailで送信。


<?php
$first_name = $_POST['first_name'];
$items = $_POST['items'];

if( is_array( $items ) ) {
    foreach( $items as $item ) {
        echo $item->name;
        echo $item->price;
    }
}
else {
~
}

ちなみにコードが完全に動く形ではないので適宜変更が必要。

参考URL