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:ユーザー入力補助

カテゴリー

flexbox インストールなど面倒なことなしにDIV BOX を横に並べるクラス

flexbox インストールなど面倒なことなしにDIV BOX を横に並べるクラス flexbox は、div の box を横に並べるためのブラウザに標準装備されてるクラス。乱暴な言い方すればそういうことです。現場では細かいことはどうでもよくて、とにかく簡単に DIV BOX を横

vba タスクに IE が残る

vba タスクに IE が残る vba タスクに IE が残る。VBAでブラウザ経由でサイトのページの情報を拾い上げる技は結構使いますよね?私だけ?wwwそうすると、なぜかvba タスクに IE が残っていて、繰り返し利用するとどん

wp datepicker 特定の項目で動かない。

wp datepicker 特定の項目で動かない。 ワードプレスでつかえる datepicker は、とっても簡単につかえて便利なライブラリーです。javascript は、なれないとデバッグに時間がかかり気持ち的にすごく敷居が高い気がしますがわかって

プラグインの管理画面でHTMLの入力を許すフィールドの扱い方

プラグインの管理画面でHTMLの入力を許すフィールドの扱い方 ワードプレスのプラグインを書いていると、HTMLタグを入力できるフィールドを作りたくなりますよね?例えば、ページにデータを表示するときにその書式を入力さえるとか。例えば、これはワードプレスのプラグイン

ワードプレスのフッターにある jQueryの読み込みをヘッダーで出力させる

ワードプレスのフッターにある jQueryの読み込みをヘッダーで出力させる ワードプレスのフッターにあるjQueryの読み込みをヘッダーで出力させる必要ができました。simplecity の後継ともいわれる ワードプレスのテーマ cocoon のカスタマイズです。cocoon

ワードプレスで jQuery の後に script を読み込ませる方法(動的スクリプトもOK)

ワードプレスで jQuery の後に script を読み込ませる方法(動的スクリプトもOK) ワードプレスで jQuery の後に script を読み込ませる方法、これは動的スクリプトも可能な方法です。ワードプレスのプラグインで動くシステムを開発していたところ、ユーザーインターフェイスでどう