2016-04-12 10 views
0

Ich versuche, eine Wordpress-Plugin zu erstellen, die Daten aus einer benutzerdefinierten Tabelle zieht (zB Produkte)Wordpress-Plugin zu werfen 404

Ich mag jede URL haben, die so durch die Plug-In mit „Produkten“ behandelt beginnt Ich habe :.

add_action('parse_request', 'my_url_handler'); 

function my_url_handler() 
{ 
    // Manually parse the URL request 
    if(!empty($_SERVER['REQUEST_URI'])) 
    { 
     $urlvars = explode('/', $_SERVER['REQUEST_URI']); 
    } 


    if(isset($urlvars[1]) && $urlvars[1] == 'products') 
    { 
     $pluginPath = dirname(__FILE__); 
     require_once($pluginPath.'/templates/products.php'); 
    } 
} 

In $ pluginPath '/ templates/products.php ich habe:

<?php 
get_header(); ?> 
My content 
<?php get_sidebar(); ?> 
<?php get_footer(); ?> 

wenn jedoch die Seite angezeigt wird gerendert WP den 404 Code (sowie products.php einfügen) und Th e Admin-Menüleiste wird

nicht gerendert

Was ich wissen muss:

  1. Wie erkennt Wordpress 404 - brauche ich etwas zu setzen, es zu sagen, dies nicht zu werfen?
  2. Warum kommt die Admin Bar nicht - ich sehe, von der Suche dies in der Regel aufgrund des Plug-in ist - aber nicht sicher, wie das Debuggen starten ...

Alle Hinweise würden als Lauf von Google Links groß sein versuchen.

Antwort

1

Sie gehen nicht auf die optimalste Weise vor. Wordpress hat Funktionen, um URL-Umschreibungen zu berücksichtigen. Was Sie tun, hat jetzt Wordpress wissen lassen, dass die Anfrage verarbeitet wird und nicht ein 404. Hier ist, was Sie stattdessen tun sollten:

add_action('init', 'yourplugin_rewrite_init'); 

function yourplugin_rewrite_init() { 
    add_rewrite_rule(
     'products/([0-9]+)/?$', // I assume your product ID is numeric only, change the regex to suit. 
     'index.php?pagename=products&product_id=$matches[1]', 
     'top' 
    ); 
} 

add_filter('query_vars', 'yourplugin_add_query_vars'); 

function yourplugin_add_query_vars($query_vars) { 
    $query_vars[] = 'product_id'; 
    return $query_vars; 
} 

add_action('template_redirect', 'yourplugin_rewrite_templates'); 

function yourplugin_rewrite_templates() { 
    if (get_query_var('product_id')) { 
     add_filter('template_include', function() { 
      return plugin_dir_path(__FILE__) . '/products.php'; 
     }); 
    } 
} 
+0

Vielen Dank! - Das war so schmerzhaft für mich, Dokumente zu finden und das machte es klar :) –