从url检索查询的“类型”:前面的建议如链接答案中所述,有url_to_postid()
. 这将为您获取该端点处对象的ID。长话短说,此函数将只返回ID,然后运行新的\\WP_Query
从DB获取post类型对象并最终返回URl–如果有,如果是is_singular
(一篇文章、一页)。所以这个函数并没有真正的帮助。
如评论中所述,还有:
$object = get_page_by_path(
\'path/endpoint\',
OBJECT|ARRAY_N|ARRAY_A,
[ \'post\', \'page\', \'custom_post_type\', \'…\' ]
);
将运行以下查询:
$sql = "
SELECT ID, post_name, post_parent, post_type
FROM $wpdb->posts
WHERE post_name IN ( $in_string )
AND post_type IN ( $post_types_string )
";
再说一次:没有帮助。
要查询的WordPress Url:幕后
------- -------------- -------------
| URl | --> | Query Vars | --> | \\WP_Query |
------- -------------- -------------
正如@TheDeadMedic所提到的
WP::parse_request()
它发挥了所有的魔力:
检索所有查询变量时,该方法实际上会填充一个关联数组:WP::$query_vars
:
WP::$query_vars = [
// $_POST or $_GET or query string variables `foo=bar&baz=dragons`
// `custom` is not the actual name. The key will be named as the var.
\'custom\' => [],
// An array of `$postTypeObject->query_var`s
// Only those which are publicly queryable
\'post_type\' => [],
// Only publicly queryable taxonomies
\'taxonomy\' => [],
\'term\' => [],
\'name\' => [],
\'error\' => [],
// …
];
在该方法的末尾,您有两个过滤器。第一个是:
$this->query_vars = apply_filters( \'request\', $this->query_vars );
其中存在上述阵列。现在,您可以开始确定URl提供的响应类型:
add_filter( \'request\', function( Array $vars ) {
// do whatever you need to do, depending on $vars in here
return $vars;
} );
一些示例
var_dump( $vars )
:
基于日期的存档:
array (size=2)
\'year\' => string \'2016\' (length=4)
\'monthnum\' => string \'04\' (length=2)
分类存档:
array (size=1)
\'category_name\' => string \'alignment\' (length=9)
层次分类法子项:
array (size=1)
\'category_name\' => string \'parent-category/child-category-05\' (length=33)
发布单个视图–粘性与默认值相同:
array (size=2)
\'page\' => string \'\' (length=0)
\'name\' => string \'sticky\' (length=6)