Uncaught Error: Cannot use object of type WP
I was trying to place a WordPress menu inside my template file. I found using wp_nav_menu uncomfortable since it outputs markup that is not compatible with my static HTML template. I know I could just use custom menu walker class to modify the markup that wp_nav_menu. But instead, I wanted to just use only the menu name and its corresponding url and place it in my template. For this, I used this function to get an array of all the attributes/properties of the menu.
Here is the code that was generated by this function...
I found it by using 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] =
)
)
My intention is to get the value of 'post_title' and 'url'
How can I do that?
I am currently struggling with these lines of code
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>
This is generating this error
Fatal error: Uncaught Error: Cannot use object of type WP_Post as array in D:xampphtdocsmySitewp-contentthemesmySiteheader.php:98
Can anybody help? Thanks in advance.
I'm going to post this answer here for reference...
Using a foreach loop
foreach ($originalArray as $key => $data) {
$post_date = $data->post_date; // 2017-07-10 11:50:32
}
Because to access data inside an object, use -> .
Ex: $data['post_date'] to $data->post_date
You're retrieving an object, you can convert it to an array as follows:
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;
}
链接地址: http://www.djcxy.com/p/69450.html上一篇: 登录html页面后出现错误
下一篇: 未捕获的错误:不能使用WP类型的对象
