2013-09-27 5 views
2

주어진 디렉토리의 파일 목록을 링크로 표시하는 기능이 있습니다. 그런 다음 함수를 표시하는 단축 코드가 있지만 인라인 PHP를 사용하여 함수를 호출하지 않고도 단문 코드 작업을 수행하는 방법을 알 수 없습니다. 단축 코드는 WordPress 텍스트 편집기에서 인라인 PHP를 허용하는 타사 플러그인이 있기 때문에 지금까지만 작동합니다. 나는 단축 코드 기능의 아래로 껍질을 벗겼다 버전을 사용하고있어 여기단축 코드 내에서 사용자 정의 함수를 호출하십시오.

function showFiles($path){ 
    if ($handle = opendir($path)) 
    { 
     $up = substr($path, 0, (strrpos(dirname($path."/."),"/"))); 

     while (false !== ($file = readdir($handle))) 
     { 
      if ($file != "." && $file != "..") 
      { 
       $fName = $file; 
       $file = $path.'/'.$file; 
       if(is_file($file)) { 
        echo "<li><a href='/".$file."' target=_blank>".$fName."</a></li>"; 
       } 
      } 
    } 
     closedir($handle); 
    }  
} 

그리고 :

function sc_showfiles($atts, $content = null) { 
     extract(shortcode_atts(array(
     'type' => '', 
    ), $atts)); 

    $showfiles = '<ul><?php showFiles(\'files/'.$type.'files/'.do_shortcode($content).'\'); ?></ul>'; 
    return $showfiles; 
} 
add_shortcode('showfiles', 'sc_showfiles'); 

내용 영역은 사용자와 단축 코드를 입력 할 수있게합니다 여기

는 함수의 생성 된 메타를 가져 오므로 그 디렉토리는 로그인 한 사용자와 일치합니다.

나는 약 여섯 가지 일을 해봤 및 인라인 PHP를 사용하여 showFiles 함수를 호출하지 않고 달성 할 수 없었다. 내가 사용 한 번 듯했습니다 : 원래 showFiles 기능은 HTML 출력을 반향 때문에

$files = showFiles('files/'.$type.'files/'.do_shortcode($content).); 

$showfiles = '<ul>'.$files.'</ul>'; 
return $showfiles; 

을하지만, 페이지 상단의 파일 목록을 던졌다, 나는 가정합니다. 그러나 만약 에코를 최상위 함수로 되돌리려면 아무 것도 얻지 못합니다.

//////////////////// 최종 WORKING CODE /////////////////////// ////

도움을 주신 FaddishWorm에게 감사드립니다.

function showFiles($path){ 
    if ($handle = opendir($path)) 
    { 
     $up = substr($path, 0, (strrpos(dirname($path."/."),"/"))); 
     $thefiles .= '<span class="checkmarks"><ul>'; 
     while (false !== ($file = readdir($handle))) 
     { 
      if ($file != "." && $file != ".." && $file !== "index.html") 
      { 
       $fName = $file; 
       $file = $path.'/'.$file; 
       if(is_file($file)) { 
        $thefiles .= "<li><a href='/".$file."' target=_blank>".$fName."</a></li>"; 
       } 
      } 
    } 
     closedir($handle); 
     $thefiles .= '</ul></span>'; 
     return $thefiles; 
    }  
} 

function sc_showfiles($atts, $content = null) { 
     extract(shortcode_atts(array(
     'type' => '', 
    ), $atts)); 
$thefiles = showFiles('files/'.$type.'files/'.do_shortcode($content)); 
    return $thefiles; 
} 
add_shortcode('showfiles', 'sc_showfiles'); 

답변

1

함수에서 무엇인가를 반환하면 페이지에 출력되지 않습니다. 함수를 호출하면 시도 할 수 있습니다 echo showFile(blah);

PHP를 반환하는 경우 PHP가 서버 측인지 기억하십시오. 이걸 고객에게 돌려 주겠습니까? 그렇다면 그것은 작동하지 않을 것이며 당신은 이것을 다시 조사해야합니다. 클라이언트는 PHP를 실행하지 않습니다.

아약스 등을 사용하지 않는 이유는 무엇입니까?

는 편집 :

은 showFiles 기능에서 이제
print showFiles('files/'.$type.'files/'.do_shortcode($content)); 

, 반환 문자열 주위에 <ul>을 넣어. 그렇게하면 상황이 혼란스럽지 않게됩니다.

편집 - 편집 :

function showFiles($path){ 
    if ($handle = opendir($path)) 
    { 
     $up = substr($path, 0, (strrpos(dirname($path."/."),"/"))); 
     $returnString = "<ul>"; //ADDED THIS 
     while (false !== ($file = readdir($handle))) 
     { 
      if ($file != "." && $file != "..") 
      { 
       $fName = $file; 
       $file = $path.'/'.$file; 
       if(is_file($file)) { 
        returnString .= "<li><a href='/".$file."' target=_blank>".$fName."</a></li>"; 
       } 
      } 
    } 
     closedir($handle); 
     $returnString .= "</ul>"; 
     return $returnString; 
    }  
} 
+1

그냥 반복하고 명확하게하기 위해이 단축 코드 게시로 일하고있다. 나는 단지 인라인 PHP를 사용하지 않고 그것을 할 수 있기를 원한다. 나는 당신의 제안 (echo showFile (blah);)이 어떤 결과를 얻는 지 알아낼 수 있는지 알게 될 것이다. –

+0

에코 showFiles (등)에 조금 정교하게 쓰겠는지; ? 나는 당신이 내가 이것을 구현할 것을 제안하고 있는지 확실하지 않습니다. 나는 행운이없는 몇 군데를 시도했다. –

+0

나는 약간 혼란 스럽다. showFiles 함수에는 반환 문자열이 없습니다. 미안해. 난 둔기 야. –

관련 문제