2014-12-02 3 views
1

저는 PHP에 익숙하지 않아서 여기에 몇 가지 기본이 부족할 것입니다.꽤 많은 변수가있는 wordpress php str_replace 함수

WordPress의 경우 TablePress 테이블의 일부 텍스트를 바꾸는 기능이 있습니다.

function replace_stuff($text) { 

if (is_front_page() || is_page('2611') || is_child('2611')) { 

    $replace_magic = array(
     //text to search => text to replace 
     'dog' => 'cat', 
     'mouse' => 'elephant' 
    ); 
} 
$text = str_replace(array_keys((array)$replace_magic), $replace_magic, $text); 


return $text; 
} 

add_filter('tablepress_table_output', 'replace_stuff'); 

그래서 예 개에서 코끼리 같은 고양이 & 마우스와 같은 프론트 엔드에 표시 될 것이다 : 나는이 라인을 따라 코드를 사용하는 경우이 기능은 잘 작동했다.

하지만 이제는 사용자 정의 게시 유형 "드라이버"의 모든 게시물에서 입력란을 쿼리하여 바꿀 문자열을 작성하는 것이 복잡해졌습니다.

게시물 제목 & (내 '드라이버'사용자 정의 게시물 유형의 모든 게시물 중에서)에서 사용자 정의 필드의 텍스트로 바뀌는 텍스트를 찾는 목적으로이 같은 것을 제안했지만, 아무것도하지 마라!

function replace_stuff($text) { 

    if (is_front_page() || is_page('2611') || is_child('2611') || get_post_type() == 'drivers') { 

    query_posts('post_type=drivers'); 
    if (have_posts()) : 
while (have_posts()) : the_post(); 

    $profilenat = get_post_meta($post->ID, 'driver_nationality', true); 
    $profiletitle = get_the_title(); 


    $replace_magic = array(
     //text to search => text to replace 
     $profiletitle => $profilenat 
    ); 

endwhile; 
    endif; 
} 

$text = str_replace(array_keys((array)$replace_magic), $replace_magic, $text); 

return $text; 
} 

add_filter('tablepress_table_output', 'replace_stuff'); 

아무도 나에게 조언을 해주실 수 없습니까? 많은 감사.

+0

@Jamie'echo $ text'와'print_r ($ replace_magic)'도 여기에 게시 할 수 있다면 도움이 될 것입니다. – divaka

답변

0

는 첫째로 나는 당신이 $ replace_magic [$의 profiletitle] = $

profilenat 현재, 다른 모든 것들 일 경우, 다음의 모든 드라이버를 완전히 내용을 교체로 $의 replace_magic = 배열 ​​( 를 교체 할 필요가 있다고 생각 of $ replace_magic에 새 드라이버를 추가하는 대신 새 항목을 기존 어레이에 추가하십시오.

또한 이런 종류의 문제로 일부 빠른 디버깅을 수행하는 것이 유용 할 수 있습니다 문제가있는 곳을 좁히는 데 도움이됩니다. 문제가 다시 발생하는지 파악하는 것이 유용 할 것입니다. str_replace를 사용하여 동맹을 맺거나 실제로 위의 코드를 사용하고 있는지 확인하십시오.

Debugging in Wordpress은 읽을 가치가 있으며, error_log를 사용하여 wp-content 디렉토리의 debug.log에 세부 정보를 출력 할 수 있습니다.

str_replace 전에 error_log (print_r ($ replace_magic)); 쿼리 루프가 의도 한대로 작동했는지 여부를 알려줍니다. 그렇지 않은 경우 루프 내에 로그 문을 넣을 수 있습니다. 이렇게하면 루프 내용이 전혀 실행되지 않는 경우 (루프 내부의 코드에 문제가있는 경우) 또는 그렇지 않은 경우 (문제가 쿼리에 해당 될 수 있음) 알려줍니다.

또한 아직 입력하지 않았다면 WordPress Codex on query_posts을 확인하는 것이 좋습니다. query_posts는 주요 Wordpress 쿼리를 조작하며, 이와 같은 필터 내에서 사용되는 예상치 못한 결과를 줄 수 있습니다. 적어도 WP_Query를 고려하고 wp_reset_posts에 대한 노트를 확인하십시오.

도움이 될만한 희망 - 사과 중 일부는 이미 고려한 내용이지만, PHP에 대해 처음 언급 한 내용은 유용하다고 생각합니다.

+0

감사합니다. 짧은 호출로 바뀌 었습니다. 내 워드 프레스 테마에서 사용할 함수가 있습니다. $ drivernat = get_custom_field ('driver_nationality', TRUE); 이 작동 ---- 사용자 정의 필드 기능은 다음과 같습니다 기능 get_custom_field ($ 키 $ 에코 = FALSE) { \t 글로벌 $ 포스트; \t $ custom_field = get_post_meta ($ post-> ID, $ key, true); \t if ($ echo == FALSE) return $ custom_field; \t echo $ custom_field; } – Jaime