2017-04-22 1 views
0

좋아, 이제는 고급 사용자 정의 필드와 PHP를 사용하여 Wordpress 프로젝트 (PHP)를 작성하고 있습니다.2 개의 함수를 하나의 호출로 랩핑하는 방법

<section> 

<?php container_start(); ?> 

    Text goes here 

<?php container_end(); ?> 

</section> 

이 다음 코드를 생성합니다 :

<section> 

<div class="container"> 

    Text goes here 

</div> 

</section> 

이 대단한 예상대로 작동하기 때문에 나는 텍스트 주위에 컨테이너 사업부를 만듭니다이 개 기능을 만들었습니다. 배후에는 다음과 같은 두 가지 기능이 있습니다.

function container_start() { 

$container = get_sub_field('container'); 

if ($container): 
echo '<div class="container">'; 
endif; 

} 

function container_end() { 

$container = get_sub_field('container'); 

if ($container): 
echo '</div>'; 
endif; 

} 

질문 : 어떻게 수행 할 것인가를 최적화하는 방법이 있습니까? 나는 div를 추가하고 닫는 2 개의 함수를 호출하는 것이 너무 실용적이지 않다는 것을 알았다. 이것을 한 번의 호출로 감쌀 수있는 방법이 있습니까?

답변

0

그럼 당신 여전히 두 가지 기능을 사용해야하지만 어쩌면 당신은 같은 것을 할 수있는 :

function container_start() { 
    ob_start(); 
} 
function container_end() { 
    $container = get_sub_field('container'); 

    if ($container) 
     echo '<div class="container">'; 
    echo ob_get_contents(); 
    ob_end_clean(); 
    if ($container) 
     echo '</div>'; 
} 

는 그래서 그 할 것입니다 : 당신이 모든 것을 유지하기 위해 PHP로 말한다위한 ob_start container_start를 호출 할 때 를 인쇄

그런 다음 container_end를 호출 할 때, 당신은 컨테이너 일을 한 다음 인쇄 모든 것을 유지 중지 PHP를 말한다 유지 PHP 모두를 반환 ob_get_contents (당신이 그것을 에코) 및 위해서는 ob_end_clean 전화

이 방법을 사용하면 여전히 두 가지 기능이 있지만 get_sub_field ('container')는 한 번만 호출됩니다.

0

현재 설정의 이점은 태그의 균형이 유지된다는 것입니다. 여는 태그와 일치가 있습니다 닫는 "태그". 태그의 밸런싱을 관리 할 필요가 있지만, 이는 대안보다 깔끔하고 HTML로 작업하는 방식과 일치한다고 생각합니다. 이 스택 위에 태그를 추가하고 일반적인 목적으로 end() 함수를 추가하는 것과 같은 추가 마법은 복잡성을 가중시키고 가독성에 영향을 미칠 수 있습니다. WordPress는 PHP 위에 템플릿 언어를 사용하지 않으므로 이미 얻은 것보다 훨씬 나아질 수 있습니다.


즉, 닫는 태그를 제거하는 한 가지 옵션은 여러 줄의 문자열을 함수에 전달하는 것입니다. 이 방법에는별로 크지 않지만 사용할 수 있으며 다른 방법의 점프 포인트가 될 수 있습니다.

<?php 

$var = 'foo'; 

function wrapper_function($inner) { 
    echo '<div class="container">'; 
    echo $inner; 
    echo '</div>'; 
} 

?> 

Something before. 

<?php wrapper_function(<<<EOF 
    This text goes inside. I can put <html> in here, plus 
    any $var since I'm using HEREDOC rather than NOWDOC. 

    http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc 
EOF 
); ?> 

Something after. 

출력 :

Something before. 

<div class="container"> This text goes inside. I can put <html> in here, plus 
    any foo since I'm using HEREDOC rather than NOWDOC. 

    http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc</div> 
Something after. 

하나 단점 : 당신이 둥지를 할 수없는이 방법을 사용하여 작동합니다.

관련 문제