{"id":90,"date":"2014-05-10T14:46:01","date_gmt":"2014-05-10T14:46:01","guid":{"rendered":"http:\/\/localhost\/syllogic\/wp\/?p=90"},"modified":"2024-02-02T12:22:27","modified_gmt":"2024-02-02T12:22:27","slug":"wordpress-log-in-log-out-menus","status":"publish","type":"post","link":"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/","title":{"rendered":"WordPress log in \/ log out menus"},"content":{"rendered":"\n

One of the downsides of WordPress menus is the inability to have a set of menus for logged-in users that may differ from the primary menu.<\/p>\n\n\n\n

Many sites tackle this in various ways, but a conventional approach is to have a separate menus to handle  the logged-in and logged-out states of the visitor.<\/p>\n\n\n\n

A menu for logged-in users and one for logged-out<\/h3>\n\n\n\n
\"primary<\/a><\/figure>\n\n\n\n

Here is a screen shot of the secondary menu for the logged-out visitor (ie public view).<\/p>\n\n\n\n

\"logout-menu\"<\/a><\/figure>\n\n\n\n

As you can see the menu appears above the main menu and consist of a registration and login link.  This menu needs to change when the user is actually logged in…<\/p>\n\n\n\n

\"log<\/a><\/figure>\n\n\n\n

In the above case, the site is conference registration site and the menu changes to a Submission and logout menu.<\/p>\n\n\n\n

Integration with the WordPress Menu Manager<\/h3>\n\n\n\n

Now here comes the beautiful part of this custom menu….<\/p>\n\n\n\n

\"wp<\/a><\/figure>\n\n\n\n

As you can see from the above screenshot of the site Dashboard, the menu manager allows the webmaster to configure the logged-out menu by adding other pages, sub-menus, links, post, categories and what not.  However, the only thing missing is the Login menu link.  This is done dynamically with a function by simply adding a login menu item at the end of the menu structure.<\/p>\n\n\n\n

\"wp<\/a><\/figure>\n\n\n\n

Same thing for the logged-in menu structure, no login menu item.<\/p>\n\n\n\n

So what’s the big deal?<\/h3>\n\n\n\n

Why did we do this?  Well for starters, adding logout\/login urls has to be done manually using the custom Links items, which means that if the the site domain name changes (such going from a demo to a live site) one needs to remember to change it.  However, we also wanted to add an Ajax-enabled login functionality as described in this neat little tutorial<\/a> by Natko Hasik.  And the result is this:<\/p>\n\n\n\n

\"ajax-login\"<\/a><\/figure>\n\n\n\n

Neat no?<\/p>\n\n\n\n

So how does it work?  Well here is the magic….<\/p>\n\n\n\n

The functions.php file first<\/summary>\n

Here is the code to register the two menus that we will be using in the headers of our site\u2026<\/p>\n\n\n\n

function sy_conf_register_menu() {\n  register_nav_menu('quick-in-menu',__( 'Quick Loged-in Menu' ));\n  register_nav_menu('quick-out-menu',__( 'Quick Loged-out Menu' ));\n}\nadd_action( 'init', 'sy_conf_register_menu' ); \/\/ register additional menu<\/code><\/pre>\n\n\n\n

Next is the function which will add the necessary login and logout menu links dynamically each time the menus are being called by the header\u2026<\/p>\n\n\n\n

function sy_quick_nav_items( $items, $args ) \n{ \/\/$items, $menu,\n    if( 'quick-in-menu' == $args->theme_location )\n        $items.= '<li><a href=\"'.wp_logout_url(get_permalink()).'\" title=\"Logout\">Logout<\/a><\/li>';\n     if( 'quick-out-menu' == $args->theme_location ) {\n           $logInitem = '<a id=\"show_login\" href=\"\">Login<\/a>';\n        $logInitem.= '<form id=\"login\" action=\"login\" method=\"post\">';\n        $logInitem.= '    <p><\/p>';\n        $logInitem.= '    <div id=\"loginFields\"><p><label for=\"username\">Username<\/label><input id=\"username\" type=\"text\" name=\"username\"><\/p>';\n        $logInitem.= '    <p><label for=\"password\">Password<\/label><input id=\"password\" type=\"password\" name=\"password\"><\/p>';\n        $logInitem.= '    <p id=\"lostPass\"><a href=\"<?php echo wp_lostpassword_url(); ?>\">Lost your password?<\/a><\/p>';\n        $logInitem.= '    <p id=\"loginButton\"><a href=\"javascript:void(0)\">Cancel<\/a><input type=\"submit\" value=\"Login\" name=\"submit\"><\/p><\/div>';\n        $logInitem.= wp_nonce_field( 'ajax-login-nonce', 'security' );\n        $logInitem.= '<\/form>';\n        $items.= $logInitem;\n    }\n    return $items;\n}\nadd_filter( 'wp_nav_menu_items','sy_quick_nav_items', 10, 2 );<\/code><\/pre>\n\n\n\n

Finally the Ajax initialisation \u2026<\/p>\n\n\n\n

function ajax_login_init(){\n    wp_register_script('ajax-login-script', get_stylesheet_directory_uri() . '\/js\/ajax-login-script.js', array('jquery') ); \n    wp_enqueue_script('ajax-login-script');\n    wp_localize_script( 'ajax-login-script', 'ajax_login_object', array( \n        'ajaxurl' => admin_url( 'admin-ajax.php' ),\n        'redirecturl' => home_url(),\n        'loadingmessage' => __('Logging in, please wait...')\n    ));\n    \/\/ Enable the user with no privileges to run ajax_login() in AJAX\n    add_action( 'wp_ajax_nopriv_ajaxlogin', 'ajax_login' );\n}\n\/\/ Execute the action only if the user isn't logged in\nif (!is_user_logged_in()) {\n    add_action('init', 'ajax_login_init');\n}<\/code><\/pre>\n\n\n\n

\u2026and call handlers\u2026<\/p>\n\n\n\n

function ajax_login(){\n    \/\/ First check the nonce, if it fails the function will break\n    check_ajax_referer( 'ajax-login-nonce', 'security' );\n    \/\/ Nonce is checked, get the POST data and sign user on\n    $info = array();\n    $info['user_login'] = $_POST['username'];\n    $info['user_password'] = $_POST['password'];\n    $info['remember'] = true;\n    $user_signon = wp_signon( $info, false );\n    if ( is_wp_error($user_signon) ){\n        echo json_encode(array('loggedin'=>false, 'message'=>__('Wrong username or password.')));\n    } else {\n        echo json_encode(array('loggedin'=>true, 'message'=>__('Login successful, redirecting...')));\n    }\n    die();\n}<\/code><\/pre>\n<\/details>\n\n\n\n
Ajax Javascript file ajax-login-script.js<\/summary>\n

This is the javascript file that will be loaded, I place it in the js\/ folder of my child-theme root folder\u2026save the code into a new file called ajax-login-script.js<\/p>\n\n\n\n

jQuery(document).ready(function($) {\n    \/\/ Show the login dialog box on click\n    $('a#show_login').on('click', function(e){\n        $('body').prepend('<div><\/div>');\n        $('form#login').fadeIn(500);\n        $('div.login_overlay, form#login a.close').on('click', function(){\n            $('div.login_overlay').remove();\n            $('form#login').hide();\n        });\n        e.preventDefault();\n    });\n    \/\/ Perform AJAX login on form submit\n    $('form#login').on('submit', function(e){\n        $('form#login div#loginFields').fadeOut(500);\n        $('form#login p.status').show().text(ajax_login_object.loadingmessage);\n        $.ajax({\n            type: 'POST',\n            dataType: 'json',\n            url: ajax_login_object.ajaxurl,\n            data: { \n                'action': 'ajaxlogin', \/\/calls wp_ajax_nopriv_ajaxlogin\n                'username': $('form#login #username').val(), \n                'password': $('form#login #password').val(), \n                'security': $('form#login #security').val() },\n            success: function(data){\n                $('form#login p.status').text(data.message);\n                if (data.loggedin == true){\n                    document.location.href = ajax_login_object.redirecturl;\n                }\n            }\n        });\n        e.preventDefault();\n    });\n});<\/code><\/pre>\n<\/details>\n\n\n\n
CSS beautification….<\/summary>\n

the css needed to make it all look good\u2026<\/p>\n\n\n\n

form#login {\n    background-color: #FFFFFF;\n    border-top: 3px solid #7B0099;\n    display: none;\n    padding: 5px;\n    position: fixed;\n    z-index: 999;\n}\n#login div#loginFields > p {\n    line-height: 0.5em;\n    padding-bottom: 5px;\n    text-align: right;\n}\n#login div#loginFields > p#lostPass {\n    text-align: center;\n}\n#login div#loginFields input {\n    border: 1px solid #D3D3D3;\n    padding: 1px 2px;\n    width: 100px;\n}\n#login div#loginFields label {\n    margin-right: 5px;\n}\n\nform#login p.status{\n    display: none;\n    line-height: 0.5em;\n    padding-bottom: 5px;\n    text-align: center;\n}\nform#login div#loginFields a.close {\n    background: none repeat scroll 0 0 #F0F0F0;\n    border: 1px solid #D3D3D3;\n    color: #00266A;\n    font-size: 11px;\n    margin-right: 4px;\n    padding: 1px 25px;\n}\n#login div#loginFields input.submit_button {\n    color: #00266A;\n    padding: 0 2px;\n    width: 86px;\n}\n.login_overlay{\n    height: 100%;\n    width: 100%;\n    background-color: transparent;\n    opacity: 0.9;\n    position: fixed;\n    z-index: 998;\n}<\/code><\/pre>\n<\/details>\n\n\n\n
Integration into the header…<\/summary>\n

This is the tricky part, because the header will differ from one theme to the next and you will need to see where best to fit in your additional menus\u2026<\/p>\n\n\n\n

<body>\n    <header>\n         <div id=\"top-navigation\">\n                <nav id=\"quick-nav\">\n                <?php\n                    $menuClass = 'nav';\n            if ( is_user_logged_in() ) {\n                \/\/get the logged-out menu \n                $quickNav = wp_nav_menu( array( 'theme_location' => 'quick-in-menu', 'container' => '', 'fallback_cb' => '', 'menu_class' => $menuClass, 'menu_id' => 'quick-menu', 'echo' => false ) );\n                if ( '' == $quickNav ) : \/\/in case the menus have not been setup\n                ?>\n                    <ul id=\"quick-menu\">\n                        <li><a href=\"<?php echo wp_logout_url(get_permalink()); ?>\" title=\"Logout\">Logout<\/a><\/li>\n                    <\/ul>\n                <?php\n                else :\n                    echo ( $quickNav );\n                endif;\n            } else {\n                \/\/get the logged-in menu\n                $quickNav = wp_nav_menu( array( 'theme_location' => 'quick-out-menu', 'container' => '', 'fallback_cb' => '', 'menu_class' => $menuClass, 'menu_id' => 'quick-menu', 'echo' => false ) );\n                if ( '' == $quickNav ) :\/\/in case the menus have not been setup\n            ?>\n                    <ul id=\"quick-menu\">\n                        <li><a href=\"<?php echo wp_login_url(get_permalink()); ?>\" title=\"Login\">Login<\/a><\/li>\n                    <\/ul>\n            <?php\n                else :\n                    echo ( $quickNav );\n                endif;\n            }\n            ?>\n                <\/nav>\n                <nav id=\"top-menu\">\n                <?php\n                    $menuClass = 'nav';\n                            $primaryNav = wp_nav_menu( array( 'theme_location' => 'primary-menu', 'container' => '', 'fallback_cb' => '', 'menu_class' => $menuClass, 'menu_id' => 'top-menu', 'echo' => false ) );\n                                 ?>\n                                <!-- ...your primary menu html code....-->\n                <\/nav>\n         <\/div>\n    <\/header><\/code><\/pre>\n<\/details>\n","protected":false},"excerpt":{"rendered":"

One of the downsides of WordPress menus is the inability to have a set of menus for logged-in users that may differ from the primary menu. Many sites tackle this in various ways, but a conventional approach is to have a separate menus to handle  the logged-in and logged-out states of the visitor. A menu […]<\/p>\n","protected":false},"author":2,"featured_media":359,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,10],"tags":[7,8],"yoast_head":"\nWordpress log in \/ log out menus - Tiffin Consulting<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wordpress log in \/ log out menus - Tiffin Consulting\" \/>\n<meta property=\"og:description\" content=\"One of the downsides of WordPress menus is the inability to have a set of menus for logged-in users that may differ from the primary menu. Many sites tackle this in various ways, but a conventional approach is to have a separate menus to handle  the logged-in and logged-out states of the visitor. A menu […]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/\" \/>\n<meta property=\"og:site_name\" content=\"Tiffin Consulting\" \/>\n<meta property=\"article:published_time\" content=\"2014-05-10T14:46:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-02T12:22:27+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/localhost:10008\/wp-content\/uploads\/2014\/05\/WP-Login-Menu.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"606\" \/>\n\t<meta property=\"og:image:height\" content=\"421\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Aurovrata V.\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Aurovrata V.\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\n\t \"@context\": \"https:\/\/schema.org\",\n\t \"@graph\": [\n\t {\n\t \"@type\": \"Article\",\n\t \"@id\": \"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/#article\",\n\t \"isPartOf\": {\n\t \"@id\": \"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/\"\n\t },\n\t \"author\": {\n\t \"name\": \"Aurovrata V.\",\n\t \"@id\": \"http:\/\/localhost:10008\/#\/schema\/person\/361f7db128e2b6858c7deb2a43f85f99\"\n\t },\n\t \"headline\": \"WordPress log in \/ log out menus\",\n\t \"datePublished\": \"2014-05-10T14:46:01+00:00\",\n\t \"dateModified\": \"2024-02-02T12:22:27+00:00\",\n\t \"mainEntityOfPage\": {\n\t \"@id\": \"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/\"\n\t },\n\t \"wordCount\": 464,\n\t \"publisher\": {\n\t \"@id\": \"http:\/\/localhost:10008\/#\/schema\/person\/e7549052d5ca8cb5891c059c2424a9f6\"\n\t },\n\t \"keywords\": [\n\t \"ajax\",\n\t \"login\"\n\t ],\n\t \"articleSection\": [\n\t \"Menus\",\n\t \"News & Updates\"\n\t ],\n\t \"inLanguage\": \"en-US\"\n\t },\n\t {\n\t \"@type\": \"WebPage\",\n\t \"@id\": \"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/\",\n\t \"url\": \"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/\",\n\t \"name\": \"Wordpress log in \/ log out menus - Tiffin Consulting\",\n\t \"isPartOf\": {\n\t \"@id\": \"http:\/\/localhost:10008\/#website\"\n\t },\n\t \"datePublished\": \"2014-05-10T14:46:01+00:00\",\n\t \"dateModified\": \"2024-02-02T12:22:27+00:00\",\n\t \"breadcrumb\": {\n\t \"@id\": \"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/#breadcrumb\"\n\t },\n\t \"inLanguage\": \"en-US\",\n\t \"potentialAction\": [\n\t {\n\t \"@type\": \"ReadAction\",\n\t \"target\": [\n\t \"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/\"\n\t ]\n\t }\n\t ]\n\t },\n\t {\n\t \"@type\": \"BreadcrumbList\",\n\t \"@id\": \"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/#breadcrumb\",\n\t \"itemListElement\": [\n\t {\n\t \"@type\": \"ListItem\",\n\t \"position\": 1,\n\t \"name\": \"Home\",\n\t \"item\": \"http:\/\/localhost:10008\/\"\n\t },\n\t {\n\t \"@type\": \"ListItem\",\n\t \"position\": 2,\n\t \"name\": \"WordPress log in \/ log out menus\"\n\t }\n\t ]\n\t },\n\t {\n\t \"@type\": \"WebSite\",\n\t \"@id\": \"http:\/\/localhost:10008\/#website\",\n\t \"url\": \"http:\/\/localhost:10008\/\",\n\t \"name\": \"Tiffin Consulting\",\n\t \"description\": \"digital business transformation\",\n\t \"publisher\": {\n\t \"@id\": \"http:\/\/localhost:10008\/#\/schema\/person\/e7549052d5ca8cb5891c059c2424a9f6\"\n\t },\n\t \"potentialAction\": [\n\t {\n\t \"@type\": \"SearchAction\",\n\t \"target\": {\n\t \"@type\": \"EntryPoint\",\n\t \"urlTemplate\": \"http:\/\/localhost:10008\/?s={search_term_string}\"\n\t },\n\t \"query-input\": \"required name=search_term_string\"\n\t }\n\t ],\n\t \"inLanguage\": \"en-US\"\n\t },\n\t {\n\t \"@type\": [\n\t \"Person\",\n\t \"Organization\"\n\t ],\n\t \"@id\": \"http:\/\/localhost:10008\/#\/schema\/person\/e7549052d5ca8cb5891c059c2424a9f6\",\n\t \"name\": \"Aurovrata V.\",\n\t \"image\": {\n\t \"@type\": \"ImageObject\",\n\t \"inLanguage\": \"en-US\",\n\t \"@id\": \"http:\/\/localhost:10008\/#\/schema\/person\/image\/\",\n\t \"url\": \"http:\/\/localhost:10008\/wp-content\/uploads\/2024\/02\/tiffin-dabbawalla.png\",\n\t \"contentUrl\": \"http:\/\/localhost:10008\/wp-content\/uploads\/2024\/02\/tiffin-dabbawalla.png\",\n\t \"width\": 1060,\n\t \"height\": 644,\n\t \"caption\": \"Aurovrata V.\"\n\t },\n\t \"logo\": {\n\t \"@id\": \"http:\/\/localhost:10008\/#\/schema\/person\/image\/\"\n\t },\n\t \"sameAs\": [\n\t \"http:\/\/localhost:10008\"\n\t ]\n\t },\n\t {\n\t \"@type\": \"Person\",\n\t \"@id\": \"http:\/\/localhost:10008\/#\/schema\/person\/361f7db128e2b6858c7deb2a43f85f99\",\n\t \"name\": \"Aurovrata V.\",\n\t \"image\": {\n\t \"@type\": \"ImageObject\",\n\t \"inLanguage\": \"en-US\",\n\t \"@id\": \"http:\/\/localhost:10008\/#\/schema\/person\/image\/\",\n\t \"url\": \"http:\/\/1.gravatar.com\/avatar\/?s=96&d=mm&r=g\",\n\t \"contentUrl\": \"http:\/\/1.gravatar.com\/avatar\/?s=96&d=mm&r=g\",\n\t \"caption\": \"Aurovrata V.\"\n\t },\n\t \"url\": \"http:\/\/localhost:10008\/author\/aurovrata\/\"\n\t }\n\t ]\n\t}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Wordpress log in \/ log out menus - Tiffin Consulting","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/","og_locale":"en_US","og_type":"article","og_title":"Wordpress log in \/ log out menus - Tiffin Consulting","og_description":"One of the downsides of WordPress menus is the inability to have a set of menus for logged-in users that may differ from the primary menu. Many sites tackle this in various ways, but a conventional approach is to have a separate menus to handle  the logged-in and logged-out states of the visitor. A menu […]","og_url":"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/","og_site_name":"Tiffin Consulting","article_published_time":"2014-05-10T14:46:01+00:00","article_modified_time":"2024-02-02T12:22:27+00:00","og_image":[{"width":606,"height":421,"url":"http:\/\/localhost:10008\/wp-content\/uploads\/2014\/05\/WP-Login-Menu.jpg","type":"image\/jpeg"}],"author":"Aurovrata V.","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Aurovrata V.","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/#article","isPartOf":{"@id":"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/"},"author":{"name":"Aurovrata V.","@id":"http:\/\/localhost:10008\/#\/schema\/person\/361f7db128e2b6858c7deb2a43f85f99"},"headline":"WordPress log in \/ log out menus","datePublished":"2014-05-10T14:46:01+00:00","dateModified":"2024-02-02T12:22:27+00:00","mainEntityOfPage":{"@id":"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/"},"wordCount":464,"publisher":{"@id":"http:\/\/localhost:10008\/#\/schema\/person\/e7549052d5ca8cb5891c059c2424a9f6"},"keywords":["ajax","login"],"articleSection":["Menus","News & Updates"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/","url":"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/","name":"Wordpress log in \/ log out menus - Tiffin Consulting","isPartOf":{"@id":"http:\/\/localhost:10008\/#website"},"datePublished":"2014-05-10T14:46:01+00:00","dateModified":"2024-02-02T12:22:27+00:00","breadcrumb":{"@id":"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/localhost:10008\/wordpress-log-in-log-out-menus\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/localhost:10008\/"},{"@type":"ListItem","position":2,"name":"WordPress log in \/ log out menus"}]},{"@type":"WebSite","@id":"http:\/\/localhost:10008\/#website","url":"http:\/\/localhost:10008\/","name":"Tiffin Consulting","description":"digital business transformation","publisher":{"@id":"http:\/\/localhost:10008\/#\/schema\/person\/e7549052d5ca8cb5891c059c2424a9f6"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/localhost:10008\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"http:\/\/localhost:10008\/#\/schema\/person\/e7549052d5ca8cb5891c059c2424a9f6","name":"Aurovrata V.","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/localhost:10008\/#\/schema\/person\/image\/","url":"http:\/\/localhost:10008\/wp-content\/uploads\/2024\/02\/tiffin-dabbawalla.png","contentUrl":"http:\/\/localhost:10008\/wp-content\/uploads\/2024\/02\/tiffin-dabbawalla.png","width":1060,"height":644,"caption":"Aurovrata V."},"logo":{"@id":"http:\/\/localhost:10008\/#\/schema\/person\/image\/"},"sameAs":["http:\/\/localhost:10008"]},{"@type":"Person","@id":"http:\/\/localhost:10008\/#\/schema\/person\/361f7db128e2b6858c7deb2a43f85f99","name":"Aurovrata V.","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/localhost:10008\/#\/schema\/person\/image\/","url":"http:\/\/1.gravatar.com\/avatar\/?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/?s=96&d=mm&r=g","caption":"Aurovrata V."},"url":"http:\/\/localhost:10008\/author\/aurovrata\/"}]}},"_links":{"self":[{"href":"http:\/\/localhost:10008\/wp-json\/wp\/v2\/posts\/90"}],"collection":[{"href":"http:\/\/localhost:10008\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/localhost:10008\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/localhost:10008\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/localhost:10008\/wp-json\/wp\/v2\/comments?post=90"}],"version-history":[{"count":8,"href":"http:\/\/localhost:10008\/wp-json\/wp\/v2\/posts\/90\/revisions"}],"predecessor-version":[{"id":369,"href":"http:\/\/localhost:10008\/wp-json\/wp\/v2\/posts\/90\/revisions\/369"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/localhost:10008\/wp-json\/wp\/v2\/media\/359"}],"wp:attachment":[{"href":"http:\/\/localhost:10008\/wp-json\/wp\/v2\/media?parent=90"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/localhost:10008\/wp-json\/wp\/v2\/categories?post=90"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/localhost:10008\/wp-json\/wp\/v2\/tags?post=90"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}