我使用了Advanced Custom Fields 插件,用于创建公司领导目录页面和管理简历页面的所有数据元素。
在网站博客上,管理层不会自己发布文章,但应该看起来好像他们已经发布了。我认为这种做法被称为“客座作者”——在WordPress网站上没有用户帐户的作者,网站管理员代表他们发布内容。
我希望发生的是:
当一位客座作者被选为该帖子的作者时ACF Custom Post Object), 输出其名称。该名称应链接到存档页面www.example。com/author/johndoe
如果未选择任务作者,则默认为站点管理员的作者信息我不想创建ghost用户帐户以作为来宾作者发布。(如上所述,这些客座作者已被详细定义为团队领导职位类型的一部分,与ACF相结合。)我对WordPress主题开发相对较新,一直在谷歌上寻找实现这一目标的方法。这两篇帖子是我能找到的最接近我的情况,但并不能解决我想做的事情:
- Guest Author - How can I use custom fields to create guest author link?
- Guest Author - How to modify my custom function code if the guest author URL will follow a particular pattern/format?这是一种常见的做法吗?如果是,有人能告诉我更多信息吗?我将不胜感激!
更新一下,我就快到了。到目前为止,我已经成功地编写了一个自定义的作者帖子链接(如果存在来宾作者)。
帖子作者和来宾作者的结果URL现在具有匹配的格式…
post-author例如:www(dot)示例。com/author/johndoegest作者举例:www(dot)。com/作者/简·多伊
现在我只需要弄清楚如何劫持作者存档页面来显示来自帖子作者或访客作者的帖子。
功能。PHP代码:
add_filter( \'the_author_posts_link\', \'custom_author_posts_link\' );
function custom_author_posts_link($url) {
`global $post;
$post_object = get_field(\'post_author\');
if ( $post_object ) {
`// GUEST AUTHOR EXISTS - override post object to grab relevant guest author info
global $post;
$post = $post_object;
setup_postdata( $post );
$guest_author_slug = $post->post_name;
$guest_author_name = get_field(\'team_member_name\');
$guest_author_posts_link = site_url() . \'/author/\' . $guest_author_slug;
$guest_url = sprintf(
\'<a href="%1$s" title="%2$s" rel="author">%3$s</a>\',
esc_url( $guest_author_posts_link ),
esc_attr( sprintf( __( \'Posts by %s\' ), $guest_author_name ) ),
$guest_author_name
);
$guest_url = $link;
wp_reset_postdata(); // We\'re done here. Return to main $post object
`
}
return $url;
`
}
更新2我做了一些修改。我没有“劫持”作者存档页,而是修改了“the\\u author\\u posts\\u link”过滤器,在合适的情况下指向自定义帖子类型。现在,我的三种作者类型都有一个端点,我可以在这里显示他们的个人简历和活动。博客帖子使用高级自定义字段,其中包含从两种相关帖子类型(团队领导和来宾贡献者)中选择的拉入帖子对象。
add_filter( \'the_author_posts_link\', \'custom_author_posts_link\' );
function custom_author_posts_link($url) {
global $post;
// Check if a post author is defined in the post_author post object. If none is defined, override will not occur and default post author will display
$post_object = get_field(\'post_author\');
if ( $post_object ) {
// Post author exists. Override post object to grab relevant guest author info.
global $post;
$post = $post_object;
setup_postdata( $post );
$author_type = get_field(\'author_type\');
$author_slug = $post->post_name;
$author_name = get_field(\'author_name\');
// Use the post author type to determine the author link
if ( strtolower($author_type) == \'guest contributor\' ){
$author_posts_link = site_url() . \'/guest-contributor/\' . $author_slug;
} else {
$author_posts_link = site_url() . \'/leadership-team/\' . $author_slug;
}
// Format the link to return. This is based off the default filter (See WordPress: https://core.trac. wordpress.org/browser/tags/4.1/src/wp-includes/author-template.php)
$guest_url = sprintf(
\'<a href="%1$s" tit le="%2$s" rel="author">%3$s</a>\',
esc_url( $author_po sts_link ),
esc_attr( sprintf( __( \'Posts by %s\' ), $author_name ) ),
$author_name
);
$url = $guest_url;
wp_reset_postdata(); // We\'re done here, return to main $post object
}
return $url;
}