私は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 {
}
それでも管理者だけがリンクを見ることができます。
単にauthor.phpページを修正する必要があるのなら、このコードはおそらくうまくいくでしょう:
<?php
if( is_user_logged_in() && is_author(get_current_user_id()) ) {
edit_post_link('edit', '', '');
}
?>
条件の最初の部分では、ログインしているユーザーがいるかどうかを確認します。現在のページが現在のユーザーの作者ページである場合、2番目のものは真になります。
私はポストエディットリンクがポストオーサーとモデレーター(エディターユーザーまたはその能力をどのように持っているか)に見えるべきであると思います
だから私の提案したコードはこのようなものです
global $post, $current_user;
get_currentuserinfo();
if(current_user_can( 'edit_others_posts', $post->ID ) || ($post->post_author == $current_user->ID)) {
//show edit link
}
あなたのテーマの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
に配置しないでください。そのページ以外には影響しません。あるいは、あなたがやろうとしていたように、あなたは単に関数の中身を使ってあなたの条件付きを作ることができます。
@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; ?>