• 以下のコードは、フィルターフックを使い、apt_slug_navというユーザー定義関数で、グローバルナビゲーションにhtmlのクラスを付けるということを行っています。

    質問です。
    function.phpの if ($item->object == ‘page’)のところで、$item->objectの部分はクラス(phpの方の)を呼び出していると思うのですが、$itemがどこでインスタンスされているのか($item = new Class名)、またインスタンス元のクラスはどこにあるのかがわかりません。または解釈が全然違っていたりしますか?

    同じように、get_post($item->object_id)、esc_attr($page->post_name)の$itemや$pageがどこでインスタンス化されているのかも気になります。

    php初心者ですので、検討外れな質問をしていたら申し訳ありません。
    ご教授ください。

    <header.php>
    add_filter(‘nav_menu_css_class’, ‘apt_slug_nav’, 10, 2);
    wp_nav_menu(array(
    ‘container’ => ‘div’,
    ‘container_id’ => ‘global_nav’,
    ‘theme_location’ => ‘place_pc_global’,
    ‘depth’ => 3,
    ));
    remove_filter(‘nav_menu_css_class’, ‘apt_slug_nav’);

    <functions.php>
    // wp_nav_menuにslugのクラス属性を追加する。
    function apt_slug_nav($css, $item) {
    if ($item->object == ‘page’) {
    $page = get_post($item->object_id);
    $css[] = ‘menu-item-slug-‘ . esc_attr($page->post_name);
    }
    return $css;
    }

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • モデレーター jim912

    (@jim912)

    $item も $page も WP_Post クラスのインスタンスになります。

    $item はメニューの項目を取得する wp_get_nav_menu_items が get_posts を実行し、最終的に get_postを実行し、get_post関数内で WP_Postクラスのインスタンスを生成します。
    $pageは、直接 get_post を実行し、その関数内でWP_Postクラスのインスタンスを生成しています。

    get_postも WP_Postクラスも、wp-includes/post.php で定義されていますので、確認してみてください。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「WordPressのphp部分の質問です。」には新たに返信することはできません。