我正在学习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值?
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 查看哪个参数将传递什么值。