如果帖子作者是当前用户,则显示编辑链接

时间:2013-02-09 作者:Emre Caglar

我正在创建一个作者。php页面并列出作者的所有帖子。虽然管理员可以看到帖子的编辑链接,但如果登录用户是当前用户,我想回显链接

例如

如果testuser已登录,并且当前页面为/author/testuser,则可以看到编辑帖子链接

但是

如果testuser已登录且当前页面为/作者/用户,则他无法看到链接

目前我有

$curauth = (isset($_GET[\'author_name\'])) ? get_user_by(\'slug\', $author_name) : get_userdata(intval($author));
$th = $curauth->nickname; 
$cu = $current_user->user_login;
if ( $th = $curauth ) {
  edit_post_link(\'edit\', \'\', \'\'); 
} else {

}
但仍然只有管理员可以看到链接。

4 个回复
SO网友:Mat_

如果你只需要修改作者。php页面,这段代码可能会起作用:

<?php 

if( is_user_logged_in() && is_author(get_current_user_id()) ) {

    edit_post_link(\'edit\', \'\', \'\');

}

?>
条件的第一部分检查是否有用户登录。如果当前页面是当前用户的作者页面,则第二个选项为true。

SO网友:Manchumahara

我认为帖子编辑链接应该对帖子作者和版主可见(编辑用户或如何拥有该功能)

所以我建议的代码是这样的

global $post;
$current_user = wp_get_current_user();

if(current_user_can( \'edit_others_posts\', $post->ID ) && ($post->post_author == $current_user->ID))  { 

    //show edit link    
}

SO网友:s_ha_dum

放置在主题的functions.php 这将在全局上改变edit_post_link. 它应该适用于您的所有档案,而不仅仅是您的作者档案--任何使用edit_post_link.

function limit_edit_Link_wpse_85214($link) {
  global $post,$current_user;
  get_currentuserinfo();
  if ($post->post_author == $current_user->ID) {
    return $link;
  }
  return false;
}
add_filter(\'get_edit_post_link\',\'limit_edit_Link_wpse_85214\');
If只能在循环内可靠工作,这是您应该使用的唯一位置edit_post_link 无论如何

如果您希望这只适用于您的作者存档页面,只需将代码粘贴到author.php 模板,不要将其放入function.php. 那么,除了那一页之外,它不会影响任何东西。或者,您可以使用函数的勇气使您的条件化,就像您试图做的那样。

SO网友:JimB814

我无法使用@Mat解决方案。然而,它看起来是正确的。

WP将$post->post\\U author的值存储为字符串。然而get_the_author_meta( \'ID\' )get_current_user_id() 每个都返回一个整数,因此在IF语句的第二部分可以进行严格的比较。

如果更换get_the_author_meta( \'ID\' ) 具有$post->post_author 您必须使用== 而不是=== 作为比较运算符,因为$post->post\\u author的值是字符串get_current_user_id() 返回一个整数。

测试:

<?php echo \'Author ID type: \' . gettype( get_the_author_meta( \'ID\' ) ) . \'<br>\'; ?>
<?php echo \'Current user ID type: \' . gettype( get_current_user_id() ); ?>
<?php 
    echo \'Is logged in user the author? \'; 
    if ( get_the_author_meta( \'ID\' ) == get_current_user_id() ) {
         echo \'TRUE  <br>\'; 
    } else {
        echo \'FALSE\'; 
    }
?>
使用适用于我的严格比较运算符的解决方案:

<?php if ( is_user_logged_in() && get_the_author_meta( \'ID\' ) === get_current_user_id() ) : ?> 

  //...

<?php endif; ?>  

结束

相关推荐

post author if statement

嗨,我正在尝试使用if语句。如果帖子是由特定作者创建的,我想显示一些HTML代码。这就是我想到的,但它不起作用。<?php if ( get_posts ($post->ID, \'post_author\', true) == \'20\') { ?> HTML <?php } ?> 谢谢你