HTML,CSS,PHP,ワードプレスカスタマイズ 技術情報資料

WordPress のメニュー項目を取り出す

スポンサーリンク

wordpress のメニューのカスタマイズ方法の情報は、すごく出ています。 でも、HTMLなどで供給されたホームページをワードプレスに変換するとき、めちゃめちゃ大変なのが、メニュー。 デザイナーが好き勝手にデザインしてくるものをワードプレスのメニューに対応させるって・・・ メニューに入っている項目を取り出せれば、逆にデザイナーが身勝手に作ったメニューのデザインに合わせることができる。 つまり、見た目を合わせるのではなくて、構造を合わせる・・・って意味わかるかな?

wordpress のメニュー項目を取り出す(暫定版)

プラグインで取り込めるようにしたソース
<?php
/*
Plugin Name: ゆずまるのオリジナルメニュー作成関数
Plugin URI: http://yuzumaru.info/
Description: ゆずまるのオリジナルメニュー作成関数 yuzu_nav_menu(array ( ‘theme_location’ => ‘header-navi’ ) );
Author: ゆずまる・ゆぅべぇ
Author URI: http://yuzumaru.info/
Version: 2.1204
*/
function yuzu_nav_menu( $args = array() ) {
$defaults = array( ‘menu’ => ”, ‘container’ => ‘div’, ‘container_class’ => ”, ‘container_id’ => ”, ‘menu_class’ => ‘menu’,
‘menu_id’ => ”, ‘echo’ => true, ‘fallback_cb’ => ‘wp_page_menu’, ‘before’ => ”, ‘after’ => ”, ‘link_before’ => ”,
‘link_after’ => ”, ‘items_wrap’ => ‘<ul id="%1$s" class="%2$s">%3$s</ul>’, ‘item_spacing’ => ‘preserve’,
‘depth’ => 0, ‘walker’ => ”, ‘theme_location’ => ” );
$args = wp_parse_args( $args, $defaults );
$args = apply_filters( ‘wp_nav_menu_args’, $args );
$args = (object) $args;
// Get the nav menu based on the requested menu
$menu = wp_get_nav_menu_object( $args->menu );
// If the menu exists, get its items.
if ( $menu && ! is_wp_error($menu) && !isset($menu_items) )
$menu_items = wp_get_nav_menu_items( $menu->term_id, array( ‘update_post_term_cache’ => false ) );
if ( ! $menu || is_wp_error( $menu ) )
return false;
// Set up the $menu_item variables
$menu_array=array();
$menu_items_with_children=array();
foreach ( (array) $menu_items as $menu_item ) {
if ( $menu_item->menu_item_parent ){
$menu_items_with_children[ $menu_item->menu_item_parent ] = true;
}else{
$menu_items_with_children[ $menu_item->menu_item_parent ] = false;
}
}
foreach ( (array) $menu_items as $menu_item ) {
$line = ”;
$line.= $menu_item->ID.'<>’;
$line.= $menu_item->menu_item_parent.'<>’;
if( $menu_items_with_children[$menu_item->ID] ){
$line.= ‘TRUE’.'<>’;
}else{
$line.= ‘FALSE’.'<>’;
}
$line.= $menu_item->title.'<>’;
$line.= $menu_item->url.'<>’;
$menu_array[] = $line;
}
return $menu_array;
?>
呼び出し方は、以下の通り
<?php
$menus = yuzu_nav_menu(array ( ‘menu’ => ‘2’ ) );
$n = 0;
$c = count($menus);
// 親ループ
for($n=0;$n<$c;$n++){
list($mID,$mPR,$mCH,$mTL,$mUL)=explode(‘<>’,$menus[$n]);
if( $mCH == ‘TRUE’ ){
// 子供がいる場合
// (親の表示)
for($n++;$n<$c;$n++){
list($mID,$mPR,$mCH,$mTL,$mUL)=explode(‘<>’,$menus[$n]);
if( $mPR == ‘0’ ){
break;
}
// (子供の表示)
}
}else{
// (親の表示)
}
}
?>
※親子関係しかないメニューの例です。親子、孫と階層が深い場合は、リカーシブな構造を作る必要があります。 menu で menu-id もしくは、スラッグを指定します。 中で書式を変える場合は、適当にパラメータを増やすことで対応できると思います。 ちなみにメニューIDは、メニュー画面で、メニューを表示させて「メニューを削除」にマウスオンさせると menu-id を見ることができます。 ※右クリックでリンクURLをコピーした方が見やすいかも。

wordpress の取り出せるメニュー項目

[“ID”]=> int(27) [“post_author”]=> string(1) “1” [“post_date”]=> string(19) “2018-05-03 12:25:36” [“post_date_gmt”]=> string(19) “2018-05-03 03:25:36” [“post_content”]=> string(1) ” ” [“post_title”]=> string(0) “” [“post_excerpt”]=> string(0) “” [“post_status”]=> string(7) “publish” [“comment_status”]=> string(6) “closed” [“ping_status”]=> string(6) “closed” [“post_password”]=> string(0) “” [“post_name”]=> string(2) “27” [“to_ping”]=> string(0) “” [“pinged”]=> string(0) “” [“post_modified”]=> string(19) “2018-05-03 12:32:59” [“post_modified_gmt”]=> string(19) “2018-05-03 03:32:59” [“post_content_filtered”]=> string(0) “” [“post_parent”]=> int(0) [“guid”]=> string(38) “https://~/?p=27” [“menu_order”]=> int(5) [“post_type”]=> string(13) “nav_menu_item” [“post_mime_type”]=> string(0) “” [“comment_count”]=> string(1) “0” [“filter”]=> string(3) “raw” [“db_id”]=> int(27) [“menu_item_parent”]=> string(1) “0” [“object_id”]=> string(2) “17” [“object”]=> string(4) “page” [“type”]=> string(9) “post_type” [“type_label”]=> string(15) “固定ページ” [“url”]=> string(70) “https://~/xxxxxx/” [“title”]=> string(12) “タイトル” [“target”]=> string(0) “” [“attr_title”]=> string(0) “” [“description”]=> string(0) “” [“classes”]=> array(4) { [0]=> string(0) “” [1]=> string(9) “menu-item” [2]=> string(24) “menu-item-type-post_type” [3]=> string(21) “menu-item-object-page” } [“xfn”]=> string(0) “” [“current”]=> bool(false) [“current_item_ancestor”]=> bool(false) [“current_item_parent”]=> bool(false)

wordpress のメニューの親子関係

一次元配列で表すと
IDprIDinfo
10
20
30
40
54ID4の子供
64ID4の子供
75ID5の子供
80
90
メニューの親子関係は、親が子供を知っているのではなく、子どもが親を知っているという関係になっている。 メニューの構造は、wp-includes/nav-menu-template.php に記載されていて、前述のソースは、そこから必要最小限(たぶん)の部分を取り出して、出力させたものです。

スポンサーリンク

スポンサーリンク

よく使うタグ

・float クリア
<br clear="all"><div style="clear:both;" class="clearfix"></div>
・角丸め
round-radius
border-radius:5px; -webkit-border-radius:10px; -moz-border-radius:10px;
・div box
overflow:scroll;min-width:300px;max-width:300px;min-height:300px;max-height:300px;
・TEXTAREAリサイズ
resize: vertical;
・サイトURL
home_url() // http://…
if(site_url()==home_url){
$shorturl_yuzu_path = substr(ABSPATH,0,strpos( ABSPATH, substr(site_url(),strlen(home_url()) ) ) ).’/’;
}else{
$shorturl_yuzu_path = ABSPATH.’/’;
}
// /var/…
・WP HOME URL
site_url() // http://…/wp
ABSPATH // /var/…/wp
・プラグイン(自分のDIR追加必要)
plugins_url() // http://…/plugins
WP_PLUGIN_URL // http://…/plugins
WP_PLUGIN_DIR // /var/…/plugins
・使用中のテーマ
get_template_directory_uri() // http://…/theme/xx
get_template_directory() // /var/…/theme/xx
・wp-content
content_url() // http://…/wp-content
WP_CONTENT_DIR // /var/…/wp-content
・画像URLからDIR変換
$pctdir=str_replace(content_url(), WP_CONTENT_DIR,$pcturl);
・パス名分解
$pathData = pathinfo($file);
echo $pathData["dirname"]; // /var/~
echo $pathData["filename"]; // xxx
echo $pathData["extension"]; // txt
echo $pathData["basename"]; // xxx.txt
・画像サイズ
list($width,$height) = getimagesize($url);
if(has_post_thumbnail()){
$thumbnail_id = get_post_thumbnail_id();
$thumbnail_img = wp_get_attachment_image_src( $thumbnail_id , ‘full’ );
$src = $image[0]; //url
$width = $image[1]; //横幅
$height = $image[2]; //高さ
・画像サイズ比率
list($src_w,$src_h) = getimagesize($file);
$dst_w = 600;$dst_h = 0;
$dst_h = ($dst_w!=0)?(intval(($src_h*$dst_w)/$src_w )):(($dst_h!=0)?(intval(($src_w*$dst_h)/$src_h)):0);
・疑似要素順
link visited hover active


特殊文字
シングルクォート : &#39;
ダブルクォート : &quot;
WP設定内表示前処理(htmlタグ許可項目)
$str = str_replace(‘<','&lt;' ,$str);
$str = str_replace(‘>’,’&gt;’ ,$str);
$str = str_replace(‘\”‘,’&quot;’,$str);
$str = str_replace(“\'”,’&#39;’ ,$str);
WO設定項目表示前処理(htmlタグ許可項目)
$str = str_replace(‘\”‘,'”‘,$str);
$str = str_replace(“\'”,”‘”,$str);
・テーマ
get_theme_root_uri()
get_theme_root()
・WP 情報
get_bloginfo( $show )
・Wp config FTP 情報 設置
define( ‘FTP_HOST’, ‘host’ );
define( ‘FTP_USER’, ‘id’ );
define( ‘FTP_PASS’, ‘pw’ );
define( ‘FTP_SSL’, false );
弾に使う
placeholder:ユーザー入力補助

カテゴリー

MW WP FORM のフックが効かない。

MW WP FORM のフックが効かない。 MW WP FORM のフックが効かない。MW WP FORM は、各種フックがあってカスタマイズが便利~とか言われているプラグインですが。。。マニュアルにはあるのにフックが効かないフックがかなりある

MW WP FORM のショートコードで出力される内容をカスタマイズする。

MW WP FORM のショートコードで出力される内容をカスタマイズする。 MW WP FORM のショートコードで出力される内容をカスタマイズしたくなりました。非表示フィールド type=”hidden” にデータをためておいて、それをメール送信する

WelCart 買い物かごのカスタマイズ、テンプレートファイルの場所

WelCart 買い物かごのカスタマイズ、テンプレートファイルの場所 WelCart 買い物かごのカスタマイズするとき、毎回テンプレートファイルを探すのでメモしておきます。WelCart 買い物かごのカスタマイズ、テンプレートファイルの場所WelCart 買い物かごのカ

WelCart で投稿ページに商品購入欄を作る

WelCart で投稿ページに商品購入欄を作る WelCart の商品ページは、ご存知んごとくウルトラダサい。これをカスタマイズしないとなんとも素人っぽさの抜けないサイトになってしまう。WelCart で投稿ページに商品購入欄を作るときのモジュール

FB 広告 最適化~グーグルアナリティクスとサーチコンソールの連動のさせかた(必要な分だけ)

FB 広告 最適化~グーグルアナリティクスとサーチコンソールの連動のさせかた(必要な分だけ) FB 広告 最適化にあたって必要になってくるツールがグーグルアナリティクスとサーチコンソール。別にグーグルのアナリティクス、サーチコンソールでなくてもアクセス解析はできるんだけど、グーグルはユーザー囲

FB 広告 最適化~グーグルアナリティクスの使い方(必要な分だけ)

FB 広告 最適化~グーグルアナリティクスの使い方(必要な分だけ) FB 広告 最適化にあたって必要になってくるツールがグーグルアナリティクス。別にグーグルのアナリティクスでなくてもアクセス解析はできるんだけど、グーグルはユーザー囲い込みの為他のアクセス解析では見せな