Noindex订阅者作者页面

时间:2017-03-24 作者:Gabriel Souza

我添加了在我的网站上注册的可能性(以订阅者的角色),但是每次注册都会为用户创建一个作者页面,但我不希望这些页面被索引,只希望具有上述角色的作者页面被索引。

类似于下面的代码,但没有get\\u user\\u role函数,因此我不知道如何获得该结果。如果有人能帮忙,我将不胜感激。

<meta name="robots" content="<?php if( is_page(\'author\') ) && get_user_role(\'subscriber\'); {  
    echo "noindex, nofollow";
  }else{
    echo "index, follow";
  } ?>" />
编辑:

这是@belinos答案的代码。我把它放在标题里。php,问题是online site, 在本地主机上,它不会出现。

<?php $curauth = ( isset( $_GET[ \'author_name\' ] ) ) ? get_user_by( \'slug\', $author_name ) : get_userdata( intval ($author ) ); 

$auth_data = get_userdata( $curauth->ID ); 

if ( in_array( \'subscriber\', $auth_data->roles )) { ?>
    <meta name="robots" content="noindex, nofollow"/> 
<?php } else { ?>
    <meta name="robots" content="index, follow"/>
<?php } ?>
这是错误:

警告:in\\u array()要求参数2为array,在/home/u836053643/public\\u html/wp-content/themes/gamersaction/header中为null。php在线35

这就是第35行:

if ( in_array( \'subscriber\', $auth_data->roles )) { ?>
代码工作正常,但显示了此错误。

2 个回复
SO网友:Cedon

您想要的功能是get_userdata(). 由于您需要在循环之外执行此操作,因此过程就不那么直接了。

您需要做的第一件事是设置一个名为$curauth 这是通过使用$_GET[] 超全局。

$curauth = ( isset( $_GET[ \'author_name\' ] ) ) ? get_user_by( \'slug\', $author_name ) : get_userdata( intval ($author ) );
此分配$curauth 一定在你的author.php 文件

之后,我们可以使用get_userdata() 函数并从中向其提供ID$curauth.

$auth_data = get_userdata( $curauth->ID );
然后,您的条件变成:

if ( in_array( \'subscriber\', $auth_data->roles ) ) {
    // No Follow Code
} else {
    // Follow Code
}
我的建议是在你的functions.php 文件:

function author_nofollow( $author ) {

    $auth_id = $author->ID;
    $auth_data = get_userdata( $auth_id );

    if ( in_array( \'subscriber\', $auth_data->roles ) ) {
        echo \'noindex, nofollow\';
    } else {
        echo \'index, follow\';
    }
}
那么你可以这样称呼它:

<meta name="robots" content="<?php author_nofollow( $curauth ); ?>">

SO网友:bosco

实现这一点的最简单方法是有条件地调用wp_no_robots() (或响应您的自定义<meta> 元素)中wp_head action 钩这具有模块化的额外好处——如果需要,您可以将其放入插件中,而不是执行主题修改。

在作者档案中,get_queried_object() will(通常-设置其他查询变量会导致此错误)返回WP_User - 与get_userdata() 返回。

function wpse261293_noindex_subscriber_profiles() {
  // Ignore non-author-archive content
  if( !is_author() )
    return;

  // Get a WP_User object for the author
  $author = get_queried_object();

  // If \'subscriber\' is the author\'s only role, print a nofollow robots meta element
  if( count( $author->roles ) === 1 && in_array( \'subscriber\', $author->roles ) )
    wp_no_robots(); // Alternately, replace this with echo( \'your_custom_meta_element\' )
}

add_action( \'wp_head\', \'wpse261293_noindex_subscriber_profiles\' );
如果您或其他插件具有可授予订阅者的自定义用户角色,您可能需要更改逻辑以解释它们-可能需要检查作者是否没有管理员、编辑、贡献者等角色。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请