it-swarm.com.de

So zeigen Sie eine rohe HTML-Seite an (unter Umgehung von WordPress-Themen, -Skripten usw.)

Ich bin ein Softwareentwickler mit einer WordPress-Site mit Hunderten von Seiten und sie funktioniert sehr gut.

Es gibt jedoch einige Fälle, in denen ich gerne in der Lage wäre, meine eigene Seite mit no Interaktion mit/Interferenz vom WordPress-System zu codieren (keine Themen, keine Stile, kein Javascript usw.) Es muss sich auf derselben Subdomain befinden.

Wie kann ich https://example.com/special-page einstellen, um eine HTML-Datei anzuzeigen, die irgendwo in /wp-content/ hochgeladen wurde?

Und als Bonus würde ich mich freuen, wenn es auch mit einer PHP -Datei funktionieren würde (die den HTML-Code erzeugen würde).

Ich möchte dies tun, ohne die .htaccess-Datei manuell zu bearbeiten.

Hier ist ein Beispiel, das sehr nahe kommt:

Das LeadPages WordPress Plugin scheint eine Variation dessen zu sein, was ich mir erhoffe. Es ermöglicht einem Benutzer, einen "Slug" (relativen Pfad, z. B. special-page) und den dort anzuzeigenden Inhalt anzugeben. Der Inhalt muss jedoch auf LeadPages.net gehostet sein, damit dieses Plugin verwendet werden kann.

 LeadPages plugin 

Ich hoffe, dass ich meine eigene HTML-Datei irgendwo auf meinem Server hosten kann (z. B. in einem öffentlich zugänglichen Ordner wie /wp-content/) und dann einen bestimmten relativen Pfad dazu habe.

Sehen Sie sich diese .htaccess-Datei an, die ich manuell bearbeitet habe (und die so funktioniert, wie ich es möchte):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymLinks
DirectoryIndex /wp-content/raw/book-sale.html [L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^thanks$ /wp-content/raw/book-opt-in-thank-you.html [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Am liebsten hätte ich im WordPress-Administrator angegeben, dass das Site-Stammverzeichnis (/) den Inhalt von /wp-content/raw/book-sale.html und /thanks den Inhalt von /wp-content/raw/book-opt-in-thank-you.html anzeigen soll (damit ich die .htaccess-Datei nicht bearbeiten muss) direkt.

5
Ryan

Wenn Sie bereit sind, ein untergeordnetes Thema zu erstellen und Ihre PHP -Dateien dort abzulegen, ist dieser Ansatz relativ sauber. Erstellen Sie für jede Datei eine Umschreiberegel, in der Sie den zu verwendenden Pfad und den zu ladenden Dateinamen angeben. Im folgenden Beispiel lädt /custom-path/custom-file.php aus dem Stammverzeichnis Ihres untergeordneten Themenverzeichnisses und /custom-path-2/ lädt custom-file-2.php. Vergiss nicht, die Permalinks nach dem Hinzufügen von Änderungen zu leeren.

/*
 * Set up a rewrite for each path which should load a file.
 */
function my_standalone_rewrites() {
    add_rewrite_rule( '^custom-path/?', 'index.php?standalone=custom-file', 'top' );
    add_rewrite_rule( '^custom-path-2/?', 'index.php?standalone=custom-file-2', 'top' );
}
add_action( 'init', 'my_standalone_rewrites' );

/*
 * Make `standalone` available as a query var.
 */
function my_query_vars( $vars ) {
  $vars[] = 'standalone';
  return $vars;
}
add_filter( 'query_vars', 'my_query_vars' );

/*
 * If `standalone` is set when parsing the main query, load the standalone file.
 */
function my_standalone_path( &$wp_query ) {
    if ( $wp_query->is_main_query() && get_query_var( 'standalone', false ) ) {
        // Load filename.php from your child theme root.
        get_template_part( get_query_var( 'standalone' ) );
        exit;
    }
}
add_action( 'parse_query', 'my_standalone_path' );
1
Scott Nelle

Sie können eine Seite mit dem gewünschten Slug erstellen und ein benutzerdefiniertes Feld hinzufügen, das den auszugebenden HTML-Pfad angibt (in diesem Beispiel wird entweder htmlfilepath oder htmlurl als Metakey verwendet):

add_action('wp','maybe_direct_html_output');

function maybe_direct_html_output() {
    if (is_singular()) {
        global $post;
        $htmlfilepath = get_post_meta($post->ID,'htmlfilepath',true);
        if ( ($htmlfilepath) && (file_exists($htmlfilepath)) ) {
            echo file_get_contents($htmlfilepath); exit;
        }
        $htmlurl = get_post_meta($post->ID,'htmlurl',true);
        if ($htmlurl) {
            $html = wp_remote_get($html);
            if (!is_wp_error($html)) {echo $html['body']; exit;}
        }
    }
}

.htaccess ist auf diese Weise also nicht erforderlich ... Mir ist gerade aufgefallen, dass Sie wp-content verwenden möchten, sodass Sie einfach einen relativen Pfad verwenden und dies vereinfachen können (mithilfe von htmlfile metakey):

add_action('wp','maybe_direct_html_output');

function maybe_direct_html_output() {
    if (is_singular()) {
        global $post;
        $htmlrelpath = get_post_meta($post->ID,'htmlfile',true);
        if (!$htmlrelpath) {return;}
        $htmlfilepath = WP_CONTENT_DIR.$htmlrelpath;
        if (!file_exists($htmlfilepath)) {return;}
        echo file_get_contents($htmlrelpath); exit;
    }
}

Denken Sie daran, dass WP_CONTENT_DIR keinen abschließenden Schrägstrich enthält, sodass Sie einen benutzerdefinierten relativen Pfadfeldwert für die Seite eingeben, z. B. /raw/book-sale.html.

0
majick