我已将所有作者链接设置为指向作者的buddypress个人资料,而不是指向作者存档页。我是通过我的孩子主题函数来实现的。php文件。
*add_filter( \'author_link\', \'change_author_link\', 10, 1 );
function change_author_link($link) {
$username=get_the_author_meta(\'user_nicename\');
$link = \'http://localhost/MYSITE.com/members/\' . $username;
return $link;
}
但是
我现在面临的问题是,我在buddypress配置文件中添加了一个选项卡,以链接到作者档案,这样您就可以看到他们的帖子,但由于上述代码处于活动状态,该链接将不再有效。
这是buddypress选项卡的代码,通过bp自定义添加。php文件:
//set up new nav item in buddypress profile
add_action( \'bp_setup_nav\', \'add_author_link_to_bp_profile\' );
function add_author_link_to_bp_profile() {
$post_count = count_user_posts_by_type(bp_displayed_user_id());
if( $post_count > 0 ) {
bp_core_new_nav_item( array(
\'name\' => \'Posts (\'.$post_count.\')\',
\'slug\' => \'author\',
\'position\' => 100,
\'show_for_displayed_user\' => true,
\'screen_function\' => \'redirect_user_to_author_page\',
));
}
}
//redirect link to author archive page
function redirect_user_to_author_page(){
global $bp;
wp_redirect( get_author_posts_url( $bp->displayed_user->id ) );
exit;
}
function count_user_posts_by_type( $userid, $post_type = \'post\' ) {
global $wpdb;
$where = get_posts_by_author_sql( $post_type, true, $userid );
$count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" );
return apply_filters( \'get_usernumposts\', $count, $userid );
}
我有两个选择:1)找出一种方法,使buddypress存档链接仅在成员配置文件页面上工作2)在模板中(而不是在功能文件中)手动更改网站上的作者链接
注意:我已经手动更改了整个网站的大部分链接,这也行得通,但我在更改主页的链接时遇到了问题,主页是用可视化生成器WPBakey构建的。
如果有人对如何更改主页上的作者链接有想法,即使是通过功能。php文件-因此它不会影响Buddypress作者存档链接/选项卡,这也会起作用。
当前函数的问题。php代码是重定向所有作者存档链接,使新的buddypress选项卡无效。如果我能想出如何添加一些只有在链接是主页的一部分时才会重定向链接的东西(考虑到我已经能够通过模板更改网站上的其余链接),那就太好了。
SO网友:Milo
而不是在functions.php
文件加载,找到可以在以后知道当前请求的上下文时挂接的操作,以便有针对性地添加和删除筛选器。
例如,您可以使用loop_start
要仅影响主要内容区域中的WPBakery输出:
add_action( \'loop_start\', \'wpd_loop_start_example\' );
function wpd_loop_start_example( $query ){
if( $query->is_main_query() && is_home() ){
// The loop for the main query is starting, and it\'s the home page
add_filter( \'author_link\', \'change_author_link\', 10, 1 );
}
}
您还可以删除过滤器,以便以后的内容不会被更改:
add_action( \'loop_end\', \'wpd_loop_end_example\' );
function wpd_loop_end_example( $query ){
if( $query->is_main_query() && is_home() ){
remove_filter( \'author_link\', \'change_author_link\', 10 );
}
}
template_redirect
或
wp
操作可能是在设置主查询之后但在输出开始之前添加筛选器的其他候选操作。