WordPress的:行动,过滤器及挂钩(wordpress: actions, filters &

2019-10-17 03:22发布

我很新的这(理解WP胆量),我想了解的钩子和过滤器更好,我不能直接从食品得到它。

我做了一个简单的测试,

这个想法是覆盖get_title()方法,以清除“受保护的:”从标题句,如果该页面已被保护,有一个protected_title_format过滤器,我想用它...

-的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 );
}

我能得到回音输出,但我不得到$ ID(并为没有$标题或$ POST),这种方法是()剥离出来的一切,但受保护的部分串get_title的副本。

任何人都可以照顾解释我是如何工作的 ? 谢谢


PS我想学习,这是这个问题的想法,不是有人告诉我:“嘿,只是去到的template.php后并改变它”,因为那样的话我就问:“怎么样,当我更新WP ... ?” !

Answer 1:

实际上,你可以做到这一点更简单的比你想要的东西。 你在正确的轨道上,但。

基本上,你需要做的是建立自己的功能,将剥离出的“受保护的:” WordPress的标题的一部分。 要做到这一点,最简单的方法就是创建一个使用的preg_replace()来搜索功能“受保护”的文字和剥离它。 你可以很容易地把它自动替换为您自己的文本字符串。

下面是做一个样本函数。 我们正在做的$标题为参数和返回它的修改版本。

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

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

我们要做的下一件事实际上是添加我们的函数的过滤器挂钩。 该过滤器挂钩,我们是在这个情况下,感兴趣的是“the_title”。 因此,我们增加我们只是写了以下功能下面一行:

add_filter( 'the_title', 'remove_protected_text', 10);

这增加了我们的功能remove_protected_text()到“the_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文件将允许它的工作。 您可以编写过滤器这样的大部分的WordPress的是输出文本的部分。

更新

这里的函数的修订版本应该得到的“保护”的翻译字符串,删除:

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');

基本上这里唯一的变化是,我们使用的是__()函数的字符串保护翻译,然后进行条带化的额外位。 这是种hackish的,我敢肯定有更好的方式来做到这一点,但它确实在我的测试工作。

我测试了这一点上的WordPress的西班牙语版本和它的工作,所以让我知道它是否适合你的项目。



文章来源: wordpress: actions, filters & hooks