Wordpress eklenti ve yeniden yazma kuralları çıktı içeriği

2 Cevap php

Ben o etiketi yerine eklenti içeriği çıktısı belirli etiketine bakarak, the_content bir filtresi olan bir wordpress eklenti oluşturduk.

Ben şimdi eklentisi ve çıkış şablon içinde veri aramak için kuralları yeniden kullanmak istiyorum, ama ben çok yardım bulma değilim.

Birisi bir örnek, ya da wp yöntemleri yerleşik kullanarak ve bazı içerik çıkışlar eklentisi benim yöntemlerini çağırarak bir yeniden yazma kuralı eklemek için bazı rehberlik sağlayabilir.

İdeal / dükkan isterim uyumlu olması ve i dükkan / kategori / gömlek veya mağaza / ürün /-cool-shirt böylece sonra benim eklenti benim gönderme yöntemine dükkan sonra her şeyi geçmektedir. Benim gönderme yöntemi url kalanını ayırır ve buna göre yöntemleri çağırmadan ele olacaktır.

2 Cevap

Bu oldukça ilginç alabilirsiniz. Ben bir noktada bir eklenti için bunu yapmak zorunda, ben önümde o yok, bu yüzden bu bellek, ama genel bir fikir doğru olmalıdır.

<?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();
}

?>

Yardım için http://tools.netshiftmedia.com/regexlibrary/: Normal ifadeler kullanma başlı başına bir anıtsal bir iştir, ben bu siteyi inanıyorum.

Ben de onları denilen, aslında benim özel "dinamik" sayfaları görüntülemek için FakePage eklenti kullanılır, ama ben WP her şey teknik olarak dinamik olduğunu varsayalım.

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

Daha fazla yardıma ihtiyacınız varsa bana bildirin.

Ben uzun zaman önce çok benzer bir şey yaptım ve hile ile yaptım.

Eğer çok karmaşık ya da işi yapamaz yeniden yazma kuralları inşa bulursanız, daha kolay isteği yakalamak ve sonuçları filtrelemek için bulabilirsiniz. Basitleştirilmiş bir versiyonu:

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));
}

Açıklamak gerekirse:

  1. Üzerinde eylem parse_request veritabanı araması önce denir. URL dayanarak, diğer eylemleri ve filtreleri yükler.

  2. Yazılarda filtre sahte sonuçlar ile veri tabanı arama sonuçlarını değiştirir.

DummyResult bir yazı, ya da onunla uzak olsun bunlardan yeterli gibi aynı alanlara sahip basit bir sınıftır:

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
  }
}

Orada yukarıda okuyucu için sol ödev bir sürü, ama çirkin bir çalışma yaklaşım. Muhtemelen bir ürünün özel biri ile normal sayfa şablonunu değiştirmek için, template_redirect için bir filtre eklemek isteyeceksiniz. Ve sen oldukça kalıcı bağlantı istiyorsanız, URL regex ayarlamanız gerekebilir.