몇 가지 해결 방법이 있습니다.
접근법 # 1
클래스 코드 사이에 주어진 값을 전달할 수 있도록 클래스posts_where
에서 단축 코드의 정의와 필터의 콜백을 래핑 할 수 있습니다 (예 : 전용 변수).
접근법 # 2
또 다른 방법은 WP_Query
단축 코드의 콜백 내 에서 값을 입력으로 전달하는 것입니다 .
$query = new WP_Query ( [ 'wpse_value' => 5, ... ] );
그런 다음 posts_where 필터 내에서 액세스 할 수 있습니다.
add_filter( 'posts_where', function( $where, \WP_Query $query )
{
if( $value = $query->get( 'wpse_value' ) )
{
// can use $value here
}
return $where;
}, 10, 2 );
접근법 # 3
... 또는 익명 함수를 변수에 할당하여 나중에 콜백을 제거 할 수 있도록 @the_dramatist 의 예제 를 조정할 수도 있습니다 .
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' );
use 키워드와 함께 익명 함수를 변수에 할당하는 방법에 대해서는 PHP 문서 를 확인하십시오 .
추신 : 익명 필터의 콜백을 쉽게 제거 할 수 있도록 @gmazzap의 트릭을 할당하는이 변수에 대해 처음 알게 된 것 같습니다.
그것이 도움이되기를 바랍니다!
$GLOBALS['value'] = some value
다음 호출하면$GLOBALS['value']
작동하지만 작동하지 않지만 값$value = some value
을 사용하여 호출하면$GLOBALS['value']
작동하지 않지만 PHP 매뉴얼에 따라 작동합니다.