web-dev-qa-db-ja.com

投稿者が現在のユーザーの場合は編集リンクを表示

私はauthor.phpページを作成し、著者からのすべての投稿をリストしています。管理者は投稿の編集リンクを見ることができますが、ログインしているユーザーが現在のユーザーであればリンクをエコーし​​たい

例えば

testuserがログインしていて現在のページが/ author/testuserの場合、彼は編集ポストリンクを見ることができます

しかし

testuserがログインしていて現在のページが/ author/theeeの場合、彼はリンクを見ることができません。

現在私は持っています

$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 {

}

それでも管理者だけがリンクを見ることができます。

2
Emre Caglar

単にauthor.phpページを修正する必要があるのなら、このコードはおそらくうまくいくでしょう:

<?php 

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

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

}

?>

条件の最初の部分では、ログインしているユーザーがいるかどうかを確認します。現在のページが現在のユーザーの作者ページである場合、2番目のものは真になります。

5
Mat_

私はポストエディットリンクがポストオーサーとモデレーター(エディターユーザーまたはその能力をどのように持っているか)に見えるべきであると思います

だから私の提案したコードはこのようなものです

global $post, $current_user;
get_currentuserinfo();

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

    //show edit link    
}
3
Manchumahara

あなたのテーマの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');

ループ内でのみ確実に動作するのであれば、 edit_post_link とにかく使うべき唯一の場所です。

これを作者のアーカイブページでのみ機能させたい場合は、そのコードをループの前のauthor.phpテンプレートに貼り付けて、function.phpに配置しないでください。そのページ以外には影響しません。あるいは、あなたがやろうとしていたように、あなたは単に関数の中身を使ってあなたの条件付きを作ることができます。

2
s_ha_dum

@Matソリューションを機能させることができませんでした。ただし、正しく見えます。

WPは$ post-> post_authorの値を文字列として保存します。ただし、get_the_author_meta( 'ID' )およびget_current_user_id()はそれぞれ整数を返すため、IFステートメントの2番目の部分では厳密な比較が機能します。

get_the_author_meta( 'ID' )$post->post_authorで置き換える場合、比較演算子として==ではなく===を使用する必要があります。$ post-> post_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; ?>  
0
JimB814