Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wordpress:动作、过滤器和;钩子_Wordpress_Hook_Filter_Action - Fatal编程技术网

wordpress:动作、过滤器和;钩子

wordpress:动作、过滤器和;钩子,wordpress,hook,filter,action,Wordpress,Hook,Filter,Action,我对这一点很陌生(理解WP的核心),我想更好地理解钩子和过滤器,但我不能从Codex那里得到它 我做了一个简单的测试 其思想是重写get_title()方法,以便从标题中删除“Protected:”语句如果页面受到保护,则有一个Protected_title_格式过滤器,我想使用它 post-template.php中的那一行指定: $protected_title_format = apply_filters('protected_title_format', __('Protected: %

我对这一点很陌生(理解WP的核心),我想更好地理解钩子和过滤器,但我不能从Codex那里得到它

我做了一个简单的测试

其思想是重写get_title()方法,以便从标题中删除“Protected:”语句如果页面受到保护,则有一个Protected_title_格式过滤器,我想使用它

post-template.php中的那一行指定:

$protected_title_format = apply_filters('protected_title_format', __('Protected: %s'));
对于我能从CODEX得到的东西,我需要移除那个过滤器并添加我自己的,比如

remove_action('protected_title_format');
apply_filters('protected_title_format', __('MY OWN PAGE Protected: %s'));
使用,当然像这样的东西

// Removing action
function remove_title_action() {
    remove_action('protected_title_format','get_the_title',3);
}
add_action('init','remove_title_action');

// Adding custom function
add_action('protected_title_format','fancy_title', 3, 4);

function fancy_title($id = 0) {
    $post = &get_post($id);
    $title = $post->post_title;

    echo "I'm the king of the world!... >" . $title . "< & >" . $post . "<";

    if ( !is_admin() ) {
    if ( !empty($post->post_password) ) {
        $protected_title_format = apply_filters('protected_title_format', __('MY OWN PAGE Protected: %s'));
        $title = sprintf($protected_title_format, $title);
    }
    }
    return apply_filters( 'the_title', $title, $post->ID );
}
//删除操作
函数删除标题动作(){
删除操作(“受保护的标题格式”、“获取标题”3);
}
添加动作('init','remove_title_action');
//添加自定义函数
添加动作(“受保护的标题格式”、“花式标题”,3、4);
函数名称($id=0){
$post=&get\u post($id);
$title=$post->post\u title;

echo“我是世界之王”…>“$title.”<&>“$post.”你实际上可以做得比你正在尝试的简单得多。不过,你走的是正确的道路

基本上,你要做的是创建你自己的函数,去掉WordPress标题中的“受保护:”部分。最简单的方法是创建一个函数,使用preg_replace()搜索“受保护:”文本并去掉它。你也可以让它用你自己的文本自动替换字符串

下面是一个示例函数,我们将$title作为参数,并返回它的修改版本

function remove_protected_text($title) {
  $match = '/Protected: /';
  $replacement = '';

  $title = preg_replace($match, $replacement, $title);
  return $title;
}
接下来我们要做的是将我们的函数添加到一个过滤器钩子中。在本例中,我们感兴趣的过滤器钩子是“theu title”。因此,我们在刚刚编写的函数下面添加以下行:

add_filter( 'the_title', 'remove_protected_text', 10);
这将我们的函数
remove\u protected\u text()
添加到“the\u title”筛选器中。在本例中,我使用了第三个参数将筛选器的优先级设置为10。这是完全可选的,但我认为此筛选器的优先级非常低

所以我们的代码应该是这样的:

function remove_protected_text($title) {
    $match = '/Protected: /';
    $replacement = '';

    $title = preg_replace($match, $replacement, $title);
    return $title;
}
add_filter( 'the_title', 'remove_protected_text', 10);
将该代码添加到主题中的functions.php文件将允许它工作

更新

下面是该函数的修订版,该函数应获得翻译后的字符串“Protected:”,并将其删除:

function remove_protected_text($title) {
    $protected = __('Protected: %s');
    $protected = preg_replace('/ %s/', '', $protected);

    $match = "/${protected}/";
    $replacement = '';

    $title = preg_replace($match, $replacement, $title);

    return $title;
}
add_filter( 'the_title', 'remove_protected_text');
基本上,这里唯一的变化是我们使用_uz()函数来转换受保护的字符串,然后去除多余的位。这有点像黑客,我相信有更好的方法可以做到这一点,但在我的测试中确实有效


我在一个西班牙语版本的WordPress上测试了这一点,它成功了,所以请让我知道它是否适用于您的项目。

+1感谢您尝试做正确的事情。您好,您对我的解决方案有任何运气吗?不是真的……它适用于英语WP,而不是任何其他语言:)我们应该在翻译之前获得值。请查看更新我发布的函数的d版本。