부울 값을 짧은 코드로 전달


16

워드 프레스 단축 코드에서 부울 속성을 전달하려면 어떻게해야합니까?
둘 다 [shortcode boolean_attribute="true"]또는 [shortcode boolean_attribute=true]문자열 값을 제공합니다.

편집하다

@brasofilo가 언급 한 트릭을 사용하면 자신이하는 일을 알고있는 사용자에게는 아무런 문제가 없습니다. 그러나 일부 사용자는 속성 false값 을 제공하고 값을 받으면 길을 잃게됩니다 true. 다른 해결책이 있습니까?


2
속성을 전달하지 않으면 false, 그렇지 않으면 true.
brasofilo

감사합니다 @brasofilo. 그러나 다른 해결책이 있습니까? 속성에 "false"값을 부여하면 일부 사용자가 손실되지만 "true"값을 얻게됩니다.
Sodbileg Gansukh

답변:


14

사용이 편리 0하고 1값을 다음 함수 내에서 타입 캐스팅 :

[shortcode boolean_attribute='1'] 또는 [shortcode boolean_attribute='0']

그러나 원하는 경우 엄격하게 검사 'false'하고 부울에 할당 할 수 있습니다.이 방법으로 다음을 사용할 수도 있습니다.

[shortcode boolean_attribute='false'] 또는 [shortcode boolean_attribute='true']

그때:

add_shortcode( 'shortcode', 'shortcode_cb' );

function shortcode_cb( $atts ) {
  extract( shortcode_atts( array(
    'boolean_attribute' => 1
  ), $atts ) );
  if ( $boolean_attribute === 'false' ) $boolean_attribute = false; // just to be sure...
  $boolean_attribute = (bool) $boolean_attribute;
}


좋은 대답입니다. 그러나 사용자가 진실하거나 거짓으로 선택하면 좋을 것이라고 생각했습니다. 답변을 수락 한대로 수락 할 수 없습니다.
Sodbileg Gansukh

@SodbilegGansukh이 코드로도 작동 'true'하고'false'
gmazzap

@toscho 방금 코덱 에서 복사하여 붙여 넣기 ;)
gmazzap

3
@SodbilegGansukh 모든 인수는 문자열로만 입력 (입력) 할 수 있으므로 문자열로 전달됩니다. 이 답변 이외의 다른 방법은 없습니다. 문자열이없는 부울 값을 입력하십시오 ...
fuxia

28

@GM 답변의 확장 (이것이 가능한 유일한 방법 임)으로 약간 단축 / 미화 된 확장 버전 (개인적으로 선호하는)이 있습니다.

단축 / 미화 변형

boolean포함 된 값을 확인하는 것으로 충분 합니다. 인 경우 true결과는입니다 (bool) true. 그렇지 않으면 거짓입니다. 이것은 하나의 경우를 생성하고 true다른 모든 false결과는 발생합니다.

add_shortcode( 'shortcodeWPSE', 'wpse119294ShortcodeCbA' );
function wpse119294ShortcodeCbA( $atts ) {
    $args = shortcode_atts( array(
        'boolAttr' => 'true'
    ), $atts, 'shortcodeWPSE' );

    $args['boolAttr'] = 'true' === $args['boolAttr'];
}

확장 / 사용자 안전 변형

이 버전을 선호하는 이유는 사용자가에 on/yes/1대한 별칭 으로 입력 할 수 있기 때문 입니다 true. 이렇게하면 사용자가 실제 값을 기억하지 못하는 경우 사용자 오류가 발생할 가능성이 줄어 듭니다 true.

add_shortcode( 'shortcodeWPSE', 'wpse119294ShortcodeCbA' );
function wpse119294ShortcodeCbA( $atts ) {
    $args = shortcode_atts( array(
        'boolAttr' => 'true'
    ), $atts, 'shortcodeWPSE' );

    $args['boolAttr'] = filter_var( $args['boolAttr'], FILTER_VALIDATE_BOOLEAN );
}

추가 사항 :

1)의 세 번째 인수를 항상 전달하십시오 shortcode_atts(). 그렇지 않으면 단축 코드 속성 필터를 타겟팅 할 수 없습니다.

// The var in the filter name refers to the 3rd argument.
apply_filters( "shortcode_atts_{$shortcode}", $out, $pairs, $atts );

2) 절대 사용하지 마십시오 extract(). 핵심조차도 그러한 전화를 줄이기를 원합니다. globalIDE는 추출 된 내용을 해결할 수있는 기회를 가지지 않고 실패 메시지를 던지기 때문에 변수에 대해서도 더 나쁩니다 .


1
와우, 좋은 답변입니다. 정말 고맙습니다. 귀하의 답변에 투표 할 수있는 명성을 얻었기를 바랍니다. 그리고 당신의 조언에 너무 감사합니다.
Sodbileg Gansukh

1
Sodbileg, 당신을 위해 투표했습니다. :)
Dero

wp_validate_boolean()WordPress 4.0.0 이상의 기능은 부울 값의 유효성을 검사하는 데 도움이됩니다. 함수 참조 developer.wordpress.org/reference/functions/wp_validate_boolean
Aamer Shahzad

@AamerShahzad 이것은 filter_var( $var, FILTER_VALIDATE_BOOLEAN ).이 함수 자체의 docblock 자체 가 나타내는 (의 불필요한 추가) 대안 입니다.
카이저

@kaiser 이것은 단지 정보입니다.
Aamer Shahzad

0

다음은 gmazzap의 답변을 기반으로하는 간단한 버전입니다.

'1'또는 '0'을 사용한 다음 이중 강타 "!!" "truthy / falsey"값을 부 울린 값으로 변경합니다.

"true"및 "false"문자열에서는 작동하지 않으며 "1"및 "0"만 작동합니다.

[myshortcode myvar="0"]

myshortcodefunction( $args )
{
   $myvar = !! $args['myvar'];
   var_dump($myvar); // prints bool(false)
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.