I am using a plugin called wp job manager, which creates "jobs" as wordpress posts. I am limiting the number of jobs a user can have to one and would like to add a direct link to their job in the navigation menu.
I would also like to add a edit link, which is dynamically generated using the post id of the job. Seeing as though users will only have one post , I believe this is do-able.
Edit: If I can even just get a link to the single post of the current logged in user and add it to the menu, I believe I can add the edit link inside the post itself.
The edit job url is created dynamiclly like this (in a loop)
<?php foreach ( $jobs as $job ) : ?>
<tr>
<td class="actions">
<ul class="job-dashboard-actions">
<?php
$actions = array();
switch ( $job->post_status ) {
case 'publish' :
$actions['edit'] = array( 'label' => __( 'Edit', 'wp-job-manager' ), 'nonce' => false );
break;
}
$actions = apply_filters( 'job_manager_my_job_actions', $actions, $job );
foreach ( $actions as $action => $value ) {
$action_url = add_query_arg( array( 'action' => $action, 'job_id' => $job->ID, ) , 'http://www.mywebsite./edit-my-profile/' );
if ( $value['nonce'] ) {
$action_url = wp_nonce_url( $action_url, 'job_manager_my_job_actions' );
}
echo '
<li><a href="' . esc_url( $action_url ) . '" class="job-dashboard-action-' . esc_attr( $action ) . '">' . esc_html( $value['label'] ) . '</a></li>
';
}
THis generated a link such as this http://www.mywebsite.com/edit-my-profile/?action=edit&job_id=ID so if have tried getting the post id of the current author and appending it to this url and then adding it to the menu, but I can't seem to find a way to get the post id of current logged in user outside of the post loop.
So instead I tried using the global $actionurl variable and adding it to the menu with this function, but it just breaks the menu.
function username_nav($action_url) {
return $menu = str_replace('editprofile', $action_url, $menu);
}
add_filter( 'wp_nav_menu', 'username_nav' );
Any suggestions? Thanks in advance!
If I'm reading your question right... you want to be able to get all the posts authored by the currently logged in user? In your case, it will only ever be one post? If this is the case, you want something like this:
global $current_user;
$args = array(
'post_type' => 'name of job custom post type',
'author' => $current_user->ID,
'status' => 'publish',
'posts_per_page' => 1
);
$jobs = get_posts( $args );
You may or may not need the global $current_user, but it won't hurt. The above will return one published post of which the currently logged in user is an author of. Just put the appropriate custom post type name in, as I don't know what that plugin generates for a name.
UPDATE
To generate a link to this post and add it to the end of your current navigation, you would use something like:
function new_nav_menu_items( $items ) {
global $current_user;
$args = array(
'post_type' => 'job_listing',
'author' => $current_user->ID,
'status' => 'publish',
'posts_per_page' => 1
);
$jobs = get_posts( $args );
$link = '<li><a href="' . get_permalink( $jobs->ID ) . '">Your Job</a></li>';
// add link to the end of the menu
$items = $items . $link;
return $items;
}
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items' );
If you want the link somewhere special inside the menu, you'll need to resort to a custom menu walker.
来源:https://stackoverflow.com/questions/34685396/get-post-id-of-current-logged-in-user-and-add-a-link-to-the-menu