Daftar semua persyaratan yang ada true
Karena semua is_*()
fungsi memiliki padanannya dalam variabel kueri (fungsinya hanya pembungkus), Anda dapat mengaksesnya juga dengan cara lain: Dapatkan semua yang ada true
.
Saya menulis tiket pada core / trac yang menambahkan fungsi untuk mendaftar semuanya.
Sementara itu, Anda dapat menggunakan kedua fungsi yang terdaftar sebagai plugin pembantu yang menunjukkan kepada Anda permintaan mana yang tersedia. Ini akan mencetak di var_dump()
bawah footer (baik admin & publik) di shutdown
hook.
<?php
/** Plugin Name: (#62232) »kaiser« List all conditionals that are true */
function get_conditionals()
{
global $wp_query;
foreach ( get_object_vars( $wp_query ) as $is_key => $is_value )
{
if ( $is_value && preg_match( "/is_/", $is_key ) )
$conditionals[] = $is_key;
}
return var_dump( $conditionals );
}
add_action( 'shutdown', 'get_conditionals' );
Dengan cara ini Anda dapat dengan mudah memutarnya.
@scribu menambahkan fungsinya sendiri ke tiket (solusi yang menarik juga).
<?php
/** Plugin Name: (#62232) »scribu« List all conditionals that are true */
function get_query_flags( $wp_query = null ) {
if ( !$wp_query )
$wp_query = $GLOBALS['wp_query'];
$flags = array();
foreach ( get_object_vars( $wp_query ) as $key => $val ) {
if ( 'is_' == substr( $key, 0, 3 ) && $val )
$flags[] = substr( $key, 3 );
}
return var_dump( $flags );
}
add_action( 'shutdown', 'get_query_flags' );
Performa
Saya menjalankan tes kinerja pada setiap fungsi di tengah menggunakan template timer_start/*_stop();
. Agar adil, saya mengganti nama semua fungsi menjadi nama satu karakter a/b/c()
.
Seperti yang Anda lihat, fungsi kode keras Chips paling cepat, lalu menjadi milik saya dan yang terakhir adalah dalam hal ini scribus.
Memperbarui
Jika Anda mengenal saya, maka Anda tahu cintaku pada iterator karena keanggunan, kejelasan, dan kemampuan mereka untuk hanya menyimpan satu item dalam memori alih-alih salinan seluruh array saat mengulang. Jadi, inilah kelas kustom cepat yang meluas \FilterIterator
, karenanya hanya membutuhkan satu metode tunggal yang dikerjakan ulang.
<?php
namespace WPSE;
class ConditionalsFilter extends \FilterIterator
{
/**
* Accepts properties that start with `is_` and have a positive boolean value
* @return bool
*/
public function accept()
{
return 0 === strncasecmp( $this->key(), 'is_', 3 )
and filter_var(
$this->current(),
FILTER_VALIDATE_BOOLEAN,
FILTER_NULL_ON_FAILURE
);
}
}
Ini dapat digunakan dengan cukup mudah. The $it->current()
memegang nilai, sedangkan $it->key()
pengembalian nama bersyarat / properti.
$cond = new WPSE\ConditionalsFilter( new \ArrayIterator(
get_object_vars( $GLOBALS['wp_query'] )
) );
foreach ( $cond as $c )
{
var_dump(
$cond->key(),
$cond->current()
);
}