可能有一两个插件可以做到这一点(或者可以修改为),但它可以通过三个非常简单的php函数分两步解决。
快速方法可能是1) 为应用于作者的作者别名添加用户元框。然后2) 钩住the_content
过滤器和preg_replace
文章内容中别名的作者姓名。
这可以添加到函数中。模板的php文件。
(注意:我们必须挂接两个位置,这取决于用户是访问页面还是管理员)。
第一步:编写Alias元框并保存函数
add_action( \'show_user_profile\', \'adding_author_content_alias\' );
add_action( \'edit_user_profile\', \'adding_author_content_alias\' );
function adding_author_content_alias( $user ) {
if( user_can( $user, \'edit_posts\' ) ) { //hiding this box from users below author level
?>
<h3>Author Alias</h3>
<table class="form-table">
<tr>
<th><label for="author-alias">Author Alias</label></th>
<td>
<input type="text" name="author-alias" id="author-alias" value="<?php echo esc_attr( get_the_author_meta( \'author-alias\', $user->ID ) ); ?>" class="regular-text" /><br />
<span class="description">Add your Author Alias.</span>
</td>
</tr>
</table>
<?php
}//end if user_can
}//end adding_author_content_alias()
add_action( \'personal_options_update\', \'save_author_content_alias\' );
add_action( \'edit_user_profile_update\', \'save_author_content_alias\' );
function save_author_content_alias( $user_id ) {
if ( !current_user_can( \'edit_user\', $user_id ) ) {
return false;
}
if ( isset( $_POST[\'author-alias\'] ) ) {
update_usermeta( $user_id, \'author-alias\', sanitize_text_field( $_POST[\'author-alias\'] ) );
}
}//end save_author_content_alias()
quick note: 在
adding_author_content_alias
上述方法,我们正在使用
[user_can][1]
not current_user_can
因此,我们可以传递正在查看的配置文件的用户对象,而不是查看器的对象或id,并检查CAP。
第二步:使用作者姓名和别名过滤\\u内容
有了上面的新用户元,我们可以过滤
the_content
很容易:
add_filter( \'the_content\', \'our_content_filter_function\' );
function our_content_filter_function($content) {
if( in_the_loop() && is_main_query() ) {
$author = get_the_author();
$author-alias = get_the_author_meta( \'author-alias\' );
$name_parts = explode(\' \', $author);
$first_name = name_parts[0];
$first_name = trim($first_name);
$content = preg_replace( $first_name, $author-alias, $content );
return $content;
}//end if
return $content;
}//end our_content_filter_function()
如果上述三个函数和五个钩子(或它们的某个版本)的方法能够满足您的需要,那么这三个函数和五个钩子应该可以发挥作用。
结束;)
-下面的所有内容只是对那些寻找起点的人的进一步解释;)
我将为其他寻找类似起点的人安排更多细节:
1) 以上假设作者的“显示名”按顺序设置为“第一名”和“姓氏”。如果作者的显示名称设置为仅第一个名称,则只需剪切$name_parts/expode/$first_name
塞满东西。设置$first_name = $author;
或者在preg_replace()
.
2) 您可以使用php的[list][1]
如果您的php版本不会更改。
3) 如果您希望将别名分配给作者的控制范围之外的其他人,您可以在db中将其作为选项进行元键/赋值。然后根据作者名称匹配作者键,并将键和值设置为preg_replace()
\'spattern
和replacement
, 分别地
4) 如果您不希望替换网站上出现的所有作者姓名(或在序列化文本中交换角色名称等诸如此类的事情),您可以为这两者传递数组pattern
和replacement
. 下面将介绍更多信息。
注:Wordpressthe_content
filter, 因为它是在显示帖子之前应用的,并将帖子的内容作为字符串公开为$content
.我们没有更改数据库中的任何数据,而是在查询之后和显示之前更改这些数据。现在已经足够晚了,任何主题或插件都应该能够跳到这里,因此下面的内容可以进入主题的功能中。php没有问题。
add_filter( \'the_content\', \'our_content_filter_function\' );
要记住的一件事是,您可能希望检查它是否正在处理主查询。我们使用了推荐的
[is_main_query()][2]
和
[in_the_loop()][2]
因此,如果您需要在二次查询中更改内容,您可能希望将其排除在外。
function our_content_filter_function($content) {
if ( in_the_loop() && is_main_query() ) {
//do stuff to $content here
return $content;
}
return $content;
}
注:如上所述,PHP
preg_replace()
可以接受阵列用于阵列和替换,
and 如果对它们进行键控和排序,它将匹配它们。所以
$pattern[2]
将替换为
$replacement[2]
. 但你必须
[ksort()][2]
这些数组,否则它将按照它们在代码中输入的顺序匹配它们;看见
example 2 on php.net 了解更多信息。
根据您的需要,将James替换为Thomas(我将为阵列添加更多):
$pattern = array();
$pattern[0] = \'James\';
$pattern[1] = \'Larry\';
$pattern[2] = \'Moe\';
$pattern[3] = \'Curly\';
$replacement = array();
$replacement[1] = \'Groucho\';
$replacement[0] = \'Thomas\';
$replacement[3] = \'Chico\';
$replacement[2] = \'Harpo\';
//makes sure our 1s match our 1s, and 2s match our 2s
ksort($pattern);
ksort($replacement);
//add in our $content string
preg_replace($pattern, $replacement, $content);
现在作为过滤器和回调:
add_filter( \'the_content\', \'our_content_filter_function\' );
function our_content_filter_function($content) {
if( in_the_loop() && is_main_query() ) {
$pattern = array();
$pattern[0] = \'James\';
$pattern[1] = \'Larry\';
$pattern[2] = \'Moe\';
$pattern[3] = \'Curly\';
$replacement = array();
$replacement[1] = \'Groucho\';
$replacement[0] = \'Thomas\';
$replacement[3] = \'Chico\';
$replacement[2] = \'Harpo\';
//makes sure our 1s match our 1s, and 2s match our 2s
ksort($pattern);
ksort($replacement);
//add in our $content string
preg_replace($pattern, $replacement, $content);
return $content;
}
return $content;
}