POST_UPDATED_MESSAGES过滤器是如何工作的?

时间:2013-07-27 作者:Bobby

我正在学习关于自定义帖子类型的教程,但我无法理解某些函数是如何工作的。

请允许我再解释一下。

function my_updated_messages( $messages ) {
global $post, $post_ID;
$messages[\'product\'] = array(
    0 => \'\', 
    1 => sprintf( __(\'Product updated. <a href="%s">View product</a>\'), esc_url( get_permalink($post_ID) ) ),
    2 => __(\'Custom field updated.\'),
    3 => __(\'Custom field deleted.\'),
    4 => __(\'Product updated.\'),
    5 => isset($_GET[\'revision\']) ? sprintf( __(\'Product restored to revision from %s\'), wp_post_revision_title( (int) $_GET[\'revision\'], false ) ) : false,
    6 => sprintf( __(\'Product published. <a href="%s">View product</a>\'), esc_url( get_permalink($post_ID) ) ),
    7 => __(\'Product saved.\'),
    8 => sprintf( __(\'Product submitted. <a target="_blank" href="%s">Preview product</a>\'), esc_url( add_query_arg( \'preview\', \'true\', get_permalink($post_ID) ) ) ),
    9 => sprintf( __(\'Product scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview product</a>\'), date_i18n( __( \'M j, Y @ G:i\' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
    10 => sprintf( __(\'Product draft updated. <a target="_blank" href="%s">Preview product</a>\'), esc_url( add_query_arg( \'preview\', \'true\', get_permalink($post_ID) ) ) ),
);
return $messages;
}
add_filter( \'post_updated_messages\', \'my_updated_messages\' );
我复制了上述教程代码片段的一部分。在这个例子中,我知道$messages包含和数组,其中包含某些post类型。要允许自定义邮件发送到自定义帖子类型,需要创建一个新数组,然后返回。然后过滤函数my\\u updated\\u message()(我知道add\\u filter的作用)。

好的,问题是:

当一个新函数有一个参数时,调用该函数时必须传递该参数,对吗?在上述情况下,WP如何知道$消息实际上是来自WP的$消息

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

当一个新函数有一个参数时,调用该函数时必须传递该参数,对吗?在上述情况下,WP如何知道$消息实际上是来自WP的$消息?

如果它是一个在其正常上下文中运行的WordPress钩子(您可以添加自己的钩子)(如果需要,您可以在任何地方运行过滤器),那么WordPress在以下情况下调用该函数:apply_filters(\'hook-name\', ....) 跑步。参数是在那个时候传入的,所以WordPress可以控制它。可以运行apply_filters 你自己,我不知道为什么你需要在发信息时这样做。正在应用the_content 过滤器可能非常常见,例如:

// data from some external source
$data = get_my_external_content();
$data = apply_filters(\'the_content\',$data);
现在,您已经通过该过滤器传递了自己的数据。同样,当apply_filters 跑步。

抱歉,与上面的上下文完全无关,但是为什么var\\u转储($post\\u updated\\u messages);将null返回给我。我想看看里面有什么。

post_updated_messages 是一个挂钩名称,而不是可以转储的变量。在您的回拨中var_dump($messages) 将为您提供您必须处理的内容。

如果要查看筛选器和回调,请尝试var_dump($GLOBALS[\'wp_filter\']);. 这是一个巨大的阵列。请注意。不过,并不是所有的事情都会出现。这取决于上下文以及已添加和未添加的过滤器。

结束

相关推荐

Apply_Filters()和_Excerpt提供了意外的结果

我觉得我一定错过了一些显而易见的东西,但我似乎无法让WordPress合作。我正在用一个函数生成Facebook OG标签。除了摘录,一切都很好。自get_the_excerpt($post->ID), 有没有其他方法可以创建摘录而不必创建一个全新的循环?我觉得这太过分了。我的第一反应是apply_filters():$description = apply_filters(\'the_excerpt\', get_post($post->ID)->post_content);