未捕获错误:无法使用WP_Post类型的对象作为数组

时间:2017-07-10 17:39:37

标签: php wordpress wordpress-theming

我试图在我的模板文件中放置一个WordPress菜单。我发现使用wp_nav_menu不舒服,因为它输出的标记与我的静态HTML模板不兼容。我知道我可以使用自定义菜单walker类来修改wp_nav_menu的标记。但相反,我只想使用菜单名称及其相应的URL并将其放在我的模板中。为此,我使用this function来获取菜单的所有属性/属性的数组。

以下是此函数生成的代码...

我通过使用var_dump()找到它。

    Array
(
    [0] = WP_Post Object
        (
            [ID] = 20
            [post_author] = 1
            [post_date] = 2017-07-10 11:50:32
            [post_date_gmt] = 2017-07-10 10:50:32
            [post_content] = 
            [post_title] = About
            [post_excerpt] = 
            [post_status] = publish
            [comment_status] = closed
            [ping_status] = closed
            [post_password] = 
            [post_name] = about
            [to_ping] = 
            [pinged] = 
            [post_modified] = 2017-07-10 11:50:40
            [post_modified_gmt] = 2017-07-10 10:50:40
            [post_content_filtered] = 
            [post_parent] = 0
            [guid] = http://localhost/mySite/?p=20
            [menu_order] = 1
            [post_type] = nav_menu_item
            [post_mime_type] = 
            [comment_count] = 0
            [filter] = raw
            [db_id] = 20
            [menu_item_parent] = 0
            [object_id] = 20
            [object] = custom
            [type] = custom
            [type_label] = Custom Link
            [title] = About
            [url] = #
            [target] = 
            [attr_title] = 
            [description] = 
            [classes] = Array
                (
                    [0] = 
                )

            [xfn] = 
        )

    [1] = WP_Post Object
        (
            [ID] = 21
            [post_author] = 1
            [post_date] = 2017-07-10 11:50:32
            [post_date_gmt] = 2017-07-10 10:50:32
            [post_content] = 
            [post_title] = Things I Can Do
            [post_excerpt] = 
            [post_status] = publish
            [comment_status] = closed
            [ping_status] = closed
            [post_password] = 
            [post_name] = things-i-can-do
            [to_ping] = 
            [pinged] = 
            [post_modified] = 2017-07-10 11:50:40
            [post_modified_gmt] = 2017-07-10 10:50:40
            [post_content_filtered] = 
            [post_parent] = 0
            [guid] = http://localhost/mySite/?p=21
            [menu_order] = 2
            [post_type] = nav_menu_item
            [post_mime_type] = 
            [comment_count] = 0
            [filter] = raw
            [db_id] = 21
            [menu_item_parent] = 0
            [object_id] = 21
            [object] = custom
            [type] = custom
            [type_label] = Custom Link
            [title] = Things I Can Do
            [url] = #
            [target] = 
            [attr_title] = 
            [description] = 
            [classes] = Array
                (
                    [0] = 
                )

            [xfn] = 
        )

    [2] = WP_Post Object
        (
            [ID] = 22
            [post_author] = 1
            [post_date] = 2017-07-10 11:50:32
            [post_date_gmt] = 2017-07-10 10:50:32
            [post_content] = 
            [post_title] = A Few Accomplishments
            [post_excerpt] = 
            [post_status] = publish
            [comment_status] = closed
            [ping_status] = closed
            [post_password] = 
            [post_name] = a-few-accomplishments
            [to_ping] = 
            [pinged] = 
            [post_modified] = 2017-07-10 11:50:40
            [post_modified_gmt] = 2017-07-10 10:50:40
            [post_content_filtered] = 
            [post_parent] = 0
            [guid] = http://localhost/mySite/?p=22
            [menu_order] = 3
            [post_type] = nav_menu_item
            [post_mime_type] = 
            [comment_count] = 0
            [filter] = raw
            [db_id] = 22
            [menu_item_parent] = 0
            [object_id] = 22
            [object] = custom
            [type] = custom
            [type_label] = Custom Link
            [title] = A Few Accomplishments
            [url] = #
            [target] = 
            [attr_title] = 
            [description] = 
            [classes] = Array
                (
                    [0] = 
                )

            [xfn] = 
        )

    [3] = WP_Post Object
        (
            [ID] = 23
            [post_author] = 1
            [post_date] = 2017-07-10 11:50:32
            [post_date_gmt] = 2017-07-10 10:50:32
            [post_content] = 
            [post_title] = Contact
            [post_excerpt] = 
            [post_status] = publish
            [comment_status] = closed
            [ping_status] = closed
            [post_password] = 
            [post_name] = contact
            [to_ping] = 
            [pinged] = 
            [post_modified] = 2017-07-10 11:50:40
            [post_modified_gmt] = 2017-07-10 10:50:40
            [post_content_filtered] = 
            [post_parent] = 0
            [guid] = http://localhost/mySite/?p=23
            [menu_order] = 4
            [post_type] = nav_menu_item
            [post_mime_type] = 
            [comment_count] = 0
            [filter] = raw
            [db_id] = 23
            [menu_item_parent] = 0
            [object_id] = 23
            [object] = custom
            [type] = custom
            [type_label] = Custom Link
            [title] = Contact
            [url] = #
            [target] = 
            [attr_title] = 
            [description] = 
            [classes] = Array
                (
                    [0] = 
                )

            [xfn] = 
        )

)

我的意图是获取'post_title'和'url'

的值

我该怎么做?

我目前正在努力解决这些代码行

function mt_get_menu_items($menu_name) {
if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {
    $menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
    return wp_get_nav_menu_items($menu->term_id);
}
}
$menu_items = mt_get_menu_items ('main_menu');
<nav id="nav">
<ul>
    <?php if (isset ($menu_items) ) : ?>
    <?php foreach ( (array) $menu_items as $key => $menu_item ) : ?>
    <?php // $menu_item_array = get_object_vars($menu_item[$key]);
                    $menu_object = $menu_item[$key];
                    // this line is 98
                 ?>
    <li>
         // this line is 101
        <a href="<?php $menu_object->url; ?>" class="active"><?php $menu_object->post_title; ?></a>
    </li>
    <?php endforeach; ?>
    <?php endif; ?>
</ul>
</nav>

这会产生此错误:

  

致命错误:未捕获错误:无法在D:\ xampp \ htdocs \ mySite \ wp-content \ themes \ mySite \ header.php:98

中使用WP_Post类型的对象作为数组

2 个答案:

答案 0 :(得分:11)

我将在此发布此答案以供参考......

使用foreach循环

foreach ($originalArray as $key => $data) {
  $post_date = $data->post_date; // 2017-07-10 11:50:32
}

因为要访问对象内的数据,请使用->

例如:$data['post_date']$data->post_date

答案 1 :(得分:2)

您正在检索某个对象,您可以将其转换为数组,如下所示:

function object_to_array($obj) {
if(is_object($obj)) $obj = (array) $obj;
    if(is_array($obj)) {
        $new = array();
        foreach($obj as $key => $val) {
            $new[$key] = object_to_array($val);
        }
    }
    else $new = $obj;
    return $new;       
}