2013-08-15 4 views
2

다음은 내가 수행 한 작업입니다. 플러그인 설정 페이지에 단일 양식 필드 텍스트 영역이 있습니다. 지금까지 데이터베이스의 내용을 올바르게 저장하고 있습니다. 이 컨텐트는 HTML/PHP가 될 것이며, 특히 WordPress 루프 내부의 컨텐트 구조 및 템플리트 태그가 될 것입니다.update_option (HTML 및 PHP가 포함 된 텍스트 영역 포함)

양식을 제출할 때이 코드를 사용하여 양식의 데이터를 데이터베이스에 삽입합니다. 그런 다음

if (isset($_POST["update_settings"])) { 
    $customPostLayout = esc_attr($_POST["post-layout"]); 
    update_option('aw_wp_yca_postcontent', $customPostLayout);  
} 

나는이와 그 데이터를 표시하고 있습니다 :

echo get_option('aw_wp_yca_postcontent'); 

그래서 나는 형식에서이 있다고 할 수 있습니다 :

<div id="wrapper"> 
    <?php the_title(); ?> 
</div> 

나는 프론트 엔드에 갈 때 게시물이해야 나는 이것을 얻는다 :

<div id=\"wrapper\"> <?php the_title(); ?> </div> 

그래서 루프 내부에서 렌더링하는 대신 문자열로 출력합니다. 여기서 내가 뭘 잘못하고 있니? 나는 내 선호도가 아닌 eval()을 사용해 보았는데 htmlspecialchars()htmlentities()으로 여러가지 시도를했다. 분명히 여기서 뭔가를 이해하지 못합니다.

답변

3

데이터베이스에 넣으면 텍스트 문자열이 저장됩니다. 따라서 데이터베이스에서 가져 오면 텍스트 문자열 만 얻게됩니다. 텍스트 문자열을 에코하면 클라이언트 코드 (html, javascript, css 등) 만 실행됩니다. 문자열에서 php 코드를 실행하려면 eval을 사용해야합니다. 이것은 좋은 습관이 아닙니다. 그러나, 나는 데이터베이스에 PHP를 저장하는 것도 좋은 방법이라고 생각하지 않습니다.

그럼에도 불구하고 eval()은 유효한 PHP 코드 인 IE의 문자열이 <?php?> 사이에 있어야하기 때문에 평가에 실패한 이유가 있습니다. 코드는 html로 시작하므로 html을 올바르게 평가하려면 약간 편집해야합니다.

eval("?> <b>foo</b> <?php ;"); 

예를 들어,이 제대로 평가 후면 것이다

$myEvalString="?> ".get_option('aw_wp_yca_postcontent'). "<?php ;"; 
eval($myEvalString); 

당신은 문자열을 파일에 기록하는 것입니다에서의 PHP 코드를 실행할 수 있도록 할 수있는 또 다른 일을 다음과 같이 그것을 포함 :

file_put_contents("/your/file/path/specialCode.php",get_option('aw_wp_yca_postcontent')); 
//your loop code... 
include '/your/file/path/specialCode.php'; 
//.. 
+0

답장을 보내 주셔서 감사합니다. 나는 두 번째 옵션을 사용할 수 없었습니다.'file_put_contents (filepath/file) [function.file-put-contents] : 스트림을 열지 못했습니다 : Permission denied'라고 말합니다. 첫 번째 옵션이 작동했습니다. 그러나 내 양식 제출은 여전히 ​​html에있는 인용 부호를 이스케이프 처리합니다. 그리고 그들 앞에 백 슬래시가있는 페이지에 써 넣으십시오. 이것에 대한 아이디어가 있습니까? – AndyWarren

+1

은 따옴표를 수정하기 위해 stripslashes ($ yourString)를 사용합니다. 서버에 대한 루트 액세스 권한이 없기 때문에 권한 문제가 발생합니다. 이는 호스팅 계획에 따라 다릅니다. ssh에서 서버에 대한 루트 액세스 권한이 있습니까? 아니면 cpanel을 사용하고 있습니까? 어떤 호스팅 계획이 있습니까? – chiliNUT

+1

루트 액세스 권한이 있으며 ssh를 통해 777에 적절한 파일을 설정하십시오. 아직도 운이 없다. 이것은 내부 가상 LAMP 서버에 있으며 외부 공유 호스트에는 없습니다. 곧 스트립 플 래쉬 (striplashes)를 시험해보고 알려 드리겠습니다. 업데이트 주셔서 감사합니다. – AndyWarren