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:
Üzerinde eylem parse_request
veritabanı araması önce denir. URL dayanarak, diğer eylemleri ve filtreleri yükler.
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.