İşte birkaç geçici çözüm:
Yaklaşım # 1
Sınıf yöntemleri arasında belirli bir değerin etrafında dolaşmak için, örneğin özel değişken gibi , kısa kodun tanımını ve posts_where
filtrenin geri aramasını bir sınıfa sarabilirsiniz .
Yaklaşım # 2
Başka bir yaklaşım, değeri kısa WP_Query
kodunuzun geri aramasına bir girdi olarak iletmek olacaktır :
$query = new WP_Query ( [ 'wpse_value' => 5, ... ] );
ve sonra posts_where filtrenizden erişebilirsiniz:
add_filter( 'posts_where', function( $where, \WP_Query $query )
{
if( $value = $query->get( 'wpse_value' ) )
{
// can use $value here
}
return $where;
}, 10, 2 );
Yaklaşım # 3
... veya anonim işlevi bir değişkene atayarak daha sonra geri aramayı kaldırabilmek için @the_dramatist tarafından örneği de ayarlayabilirsiniz :
function my_shortcode_function( $atts, $content )
{
// shortcode_atts stuff here
$value = 5; // just an example
// Add a filter's callback
add_filter( 'posts_where', $callback = function( $where ) use ( $value ) {
// $value accessible here
return $where;
} );
// WP_Query stuff here and setup $out
// Remove the filter's callback
remove_filter( 'posts_where', $callback );
return $out;
}
add_shortcode( 'my-shortcode', 'my_shortcode_function' );
Örneğin kontrol PHP dokümanlar bir değişkene, kullanım anahtar sözcüğü ile, anonim bir işlev atamak için nasıl.
ps: Sanırım ilk olarak anonim bir filtrenin geri aramasını kaldırmayı kolaylaştırmak için @gmazzap tarafından bu değişken atama hilesini öğrendim.
Umarım yardımcı olur!
$GLOBALS['value'] = some value
ve sonra$GLOBALS['value']
işe yarıyor, ancak değeri doğrudan olarak ayarlamak$value = some value
ve sonra kullanarak çağırırsanız$GLOBALS['value']
işe yaramazsa, PHP kılavuzuna göre çalışması gerekir.