今天我在考虑如何区分查询,主要是创建唯一标识符。在这个过程中,我进行了一些尝试,请参见下面的代码。
主要思想是根据$query
或$query_vars
的属性WP_Query
. 实际上已经有了一个属性query_vars_hash
, 但它很早就创建了一个子集vars,对于区分在同一请求上发生的查询没有帮助。
以下是我目前掌握的情况:
add_action( \'pre_get_posts\', \'unique_query\' );
/**
* unique_query
*
* Create unique identifier
*
*/
function unique_query( $query ) {
global $wp_query;
$query_hashes = array();
if ( is_admin() ) return;
/**
* Skip additional cases
*/
/**
if ( ! isset( $query->query[\'post_type\'] )
|| empty( $query->query[\'post_type\'] )
|| $query->query[\'post_type\'] == \'nav_menu_item\'
|| $query->is_main_query()
) {
return;
}
/**/
/**
* Debug stuff
*/
/**
echo \'<pre>\';
print_r( $query );
print_r( $wp_query );
print_r( $query->query );
print_r( $wp_query->query );
print_r( $query->query_vars );
print_r( $wp_query->query_vars );
echo \'</pre>\';
/**/
/**
* Setup query hashes array
*/
$query_hashes[ \'$wp_query->query_vars_hash\' ] = $wp_query->query_vars_hash;
$query_hashes[ \'uhash_$wp_query->query_vars\' ] = md5( serialize( $wp_query->query_vars ) );
$query_hashes[ \'$query->query_vars_hash\' ] = $query->query_vars_hash;
$query_hashes[ \'uhash_$query->query_vars\' ] = md5( serialize( $query->query_vars ) );
$query_hashes[ \'uhash_$query->query\' ] = md5( serialize( $query->query ) );
$query_hashes[ \'uhash_$wp_query->query\' ] = md5( serialize( $wp_query->query ) );
/**
* Print query hashes array
*/
echo \'<pre>\';
print_r( $query_hashes );
echo \'</pre>\';
}
产生以下示例性输出:/* Main query */
[$wp_query->query_vars_hash] => ffb3c63f9b858ab4882d8e9ed20fce67
[uhash_$wp_query->query_vars] => ffb3c63f9b858ab4882d8e9ed20fce67
[$query->query_vars_hash] => ffb3c63f9b858ab4882d8e9ed20fce67
[uhash_$query->query_vars] => ffb3c63f9b858ab4882d8e9ed20fce67
[uhash_$query->query] => 40cd750bba9870f18aada2478b24840a
[uhash_$wp_query->query] => 40cd750bba9870f18aada2478b24840a
/* Query of wp_nav_menu */
[$wp_query->query_vars_hash] => ffb3c63f9b858ab4882d8e9ed20fce67
[uhash_$wp_query->query_vars] => 59e1dad0ba690eed5e758fbf15cda702
[$query->query_vars_hash] => c5a049c558df9cf4cfd14dad179a97e8
[uhash_$query->query_vars] => c5a049c558df9cf4cfd14dad179a97e8
[uhash_$query->query] => d4226d11be5a53e8b44d5b85db43e8b0
[uhash_$wp_query->query] => 40cd750bba9870f18aada2478b24840a
/* Front/home query */
[$wp_query->query_vars_hash] => ffb3c63f9b858ab4882d8e9ed20fce67
[uhash_$wp_query->query_vars] => 59e1dad0ba690eed5e758fbf15cda702
[$query->query_vars_hash] => 712b303f79eef3c8b5928d4ed8acfe2f
[uhash_$query->query_vars] => 712b303f79eef3c8b5928d4ed8acfe2f
[uhash_$query->query] => b7ac5bdfe084209f0142d7ab3aa0683e
[uhash_$wp_query->query] => 40cd750bba9870f18aada2478b24840a
正如你所看到的,唯一可以做出明确决定的候选人是$query->query_vars_hash
/uhash_$query->query_vars
或uhash_$query->query
. 当然,在这个示例中,第一个和第二个是相同的,但将来可能需要执行现有query_vars_hash
所有物此外,你必须自己去做才能确定。所以问题是,首先,这是唯一标识查询的合理方法吗
<小时>
Edit:
@G、 M.对于所提出的问题所暗示的一切都非常正确。实际上我想添加这些信息,只是在发布时没有足够的时间,现在这只是多余的,但我想确认一下事实。