2009-04-29 3 views
0

the_content에 필터가있는 WordPress 플러그인을 만들었습니다. 특정 태그를 찾고 해당 태그 대신 플러그인 내용을 출력합니다.wordpress plugin의 출력 내용 및 다시 쓰기 규칙

이제 필자는 다시 쓰기 규칙을 사용하여 플러그인을 호출하고 템플릿 내에서 데이터를 출력하고 싶지만 많은 도움을 얻지는 못합니다.

누군가가 예제를 제공하거나 기본 제공 wp 메소드를 사용하여 다시 쓰기 규칙을 추가하고 일부 내용을 출력하는 플러그인에서 내 메소드를 호출하는 방법에 대한 지침을 제공 할 수 있습니까?

또는 shop/product/the-cool-shirt을 가질 수 있도록 이상적으로는 shop/을 일치시킨 다음 쇼핑 후 모든 것을 내 플러그인에서 내 발송 방법으로 전달하고 싶습니다. 내 디스패치 메소드는 URL의 나머지 부분을 분리하여 그에 따라 메서드를 호출하는 것을 처리합니다.

답변

0

이것은 다소 흥미로울 수 있습니다. 한 번에 플러그인을 위해이 작업을 수행해야했기 때문에 나 앞에서 플러그인을 사용하지 않았으므로이 내용은 기억이 나지 않지만 일반적인 생각은 정확해야합니다. http://tools.netshiftmedia.com/regexlibrary/을 도움 : 정규 표현식을 사용

<?php 

add_action('init', 'rewrite_rules');   


function rewrite_rules() { 
    global $wp, $wp_rewrite; 
    $wp_rewrite->add_rule('(widget1|widget2|widget3)/([a-zA-Z0-9_-]{3,50})$', 'index.php?pagename=listing&category=$matches[1]&subcategory=$matches[2]', 'top'); 
    $wp->add_query_var('category'); 
    $wp->add_query_var('subcategory'); 
    $wp_rewrite->flush_rules(); 
} 

?> 

자체에 기념비적 인 일이다, 나는이 사이트를 사용 믿습니다.

또한 실제로 사용자 지정 "동적"페이지를 표시하기 위해 FakePage 플러그인을 사용했지만, WP에서는 모든 것이 기술적으로 동적 인 것으로 가정합니다.

http://scott.sherrillmix.com/blog/blogger/creating-a-better-fake-post-with-a-wordpress-plugin/

더 많은 도움이 필요하면 알려주세요.

0

나는 오래 전에 아주 비슷한 것을했고, 나는 속임수로 그것을했다.

내장 된 다시 쓰기 규칙이 너무 복잡하거나 작업을 수행 할 수없는 경우 요청을 잡아 결과를 필터링하는 것이 더 쉽습니다. 단순화 된 버전 :

add_action('parse_request', 'my_parse_request'); 

function my_parse_request (&$wp) { 
    $path = $wp->request; 

    $groups = array(); 
    if (preg_match("%shop/product/([a-zA-Z0-9-]+)%", $path, $groups)) { 
    $code = $groups[1]; 
    $product = get_product($code); // your own code here 
    if (isset($product)) { 
     add_filter('the_posts', 'my_product_filter_posts'); 
    } 
    } 
} 

function my_product_filter_posts ($posts) { 
    ob_start(); 
    echo "stuff goes here"; // your body here 
    $content = ob_get_contents(); 
    ob_end_clean(); 

    return array(new DummyResult(0, "Product name", $content)); 
} 

설명하려면 :

  1. parse_request의 조치는 데이터베이스 조회하기 전에 호출된다. URL을 기반으로 다른 작업과 필터를 설치합니다.

  2. 게시물의 필터는 데이터베이스 조회 결과를 가짜 결과로 바꿉니다.

    class DummyResult { 
        public $ID; 
        public $post_title; 
        public $post_content; 
    
        public $post_author; 
        public $comment_status = "closed"; 
        public $post_status = "publish"; 
        public $ping_status = "closed"; 
        public $post_type = "page"; 
        public $post_date = ""; 
    
        function __construct ($ID, $title, $content) { 
        $this->ID = $ID; 
        $this->post_title = $title; 
        $this->post_content = $content; 
    
        $this->post_author = get_default_author(); // implement this function 
        } 
    } 
    

    에서 독자 떠났다 많은 숙제가있다 :

DummyResult은 단순한 게시물과 같은 필드가 클래스 또는 그것으로 도망에 불과 충분하다 위와 같지만,보기 흉한 작업 방식입니다. template_redirect에 대한 필터를 추가하여 일반 페이지 템플릿을 제품 별 템플릿으로 대체하고자 할 수 있습니다. 예쁜 퍼머 링크를 원한다면 URL 정규 표현식을 조정해야 할 수도 있습니다.