钩子参数中$post_id的来源是什么?

时间:2019-08-25 作者:NoobDev

我正在学习Wordpress主题开发中的元框。在我观看的一个教程中,tutor编写了一个保存元框值的函数。作为参数,他添加了$post\\u id和$post。

我知道$post是一个全局变量,但是$post\\u id呢,我想知道它是从哪里来的。

在询问之前,我做了一点研究,发现:https://wordpress.stackexchange.com/a/299134/172202

链接中的一个答案是:

获取post ID的另一种方法是使用挂钩回调。例如,在post\\u thumbnail\\u size挂钩中,回调函数接收一个post ID作为第二个参数

并给出了这个例子

function wpse_299132_post_thumbnail_size( $size, $post_id ) { return $size; } add_filter( \'wpse_299132_post_thumbnail_size\', \'wpse_299132_post_thumbnail_size\', 10, 2 );

The Question I Have
在过滤器挂钩中,我知道10是优先级,2是参数数,正如这个问题的答案所说:Which hook callback has priority if both plugin and theme use the same hook?

但由于2参数the number of arguments, 它不是n th argument, 由于id参数作为第二个参数插入,我首先认为它是n th 参数,但根据上面问题的答案,我发现它实际上是number of arguments. 我想如果将参数命名为$post\\u id,钩子会自动添加post id值,但事实并非如此?

第一个问题链接的回答也是这样的:

但这只是文档中用来明确变量所包含内容的名称。你可以叫它任何你喜欢的名字。这也是有效的,例如:

function wpse_299132_post_thumbnail_size( $size, $myPostId ) { return $size; } add_filter( \'wpse_299132_post_thumbnail_size\', \'wpse_299132_post_thumbnail_size\', 10, 2 );

$myPostId是第二个参数,因此将包含一个post ID。但您如何称呼它并不重要。

If 2 in the hook parameter would be n th argument, if we would add $myPostIdas the first parameter, it wouldn\'t work, but it is actually number of arguments.

钩子如何知道它是否应该为参数提供post id值?

1 个回复
SO网友:Steven

我想如果将参数命名为$post\\u id,钩子会自动添加post id值,但事实并非如此?

没错,事实并非如此。它的名称对WP通过该参数的值没有影响。如果您查看reference for the post_thumbnail_size hook, 您可以看到,它们总是在第一个参数中传递缩略图大小,在第二个参数中传递帖子ID。

您甚至可以交换名称,但仍然可以在第一个中获得大小值,在第二个中获得帖子ID:

function wpse_299132_post_thumbnail_size( $post_id, $size ) {
    echo "Size: ";
    print_r($post_id);
    echo "Post ID: $size";
}
add_filter( \'wpse_299132_post_thumbnail_size\', \'wpse_299132_post_thumbnail_size\', 10, 2 );
输出(例如):

Size: Array(
    [0] => 120
    [1] => 120
)
Post ID: 1647
钩子如何知道它是否应该为参数提供post id值?

每个钩子都有一组预定的参数;对于任何给定的挂钩,您可以检查code reference 查看哪个参数将传递什么值。

相关推荐