it-swarm-eu.dev

Zahrnout externí PHP souboru do vlastní šablony aplikace Wordpress

Je možné zahrnout externí soubor PHP do vlastní šablony?

Snažím se přidat blog na své stránky. Na svých stránkách již mám rozložení záhlaví, zápatí a postranního panelu. Mohu je použít ve vlastní šabloně?

<?php
/*
Template Name: Blog
*/
?>
<?php include( PATH . 'http://www.example.com/includes/header.php' );  ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

<div <?php post_class() ?> id="post-<?php the_ID(); ?>">
  <h2><a href="<?php the_permalink() ?>">
    <?php the_title(); ?>
    </a></h2>
  <?php include (TEMPLATEPATH . '/inc/meta.php' ); ?>
  <div class="entry">
    <?php the_content(); ?>
  </div>
  <div class="postmetadata">
    <?php the_tags('Tags: ', ', ', '<br />'); ?>
    Posted in
    <?php the_category(', ') ?>
    |
    <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?>
  </div>
</div>
<?php endwhile; ?>
<div class="mypagination">
  <?php include (TEMPLATEPATH . '/inc/nav.php' ); ?>
</div>
<?php else : ?>
<h2>Not Found</h2>
<?php endif; ?>
<?php include( PATH . 'http://www.example.com/includes/sidebar.php' );  ?>
<?php include( PATH . 'http://www.example.com/includes/footer.php' );  ?>

Také jsem se snažil:

<?php include('http://mywebsite.com/includes/header.php'); ?>
5
Jeremi Liwanag

Ne, soubory PHP nelze zahrnout do motivu tak, jak jste uvedli.

Abychom pochopili proč, musíme udělat jen nějaký zdravý rozum a základní kritické myšlení:

  1. Dálkový požadavek na vzdálený server include byste neměli dělat
  2. Pokud by to nějakým zázrakem fungovalo, měli byste velké bezpečnostní zneužití, jak bych mohl udělat něco takového: include( 'http://yoursite/wp-config.php' ); echo DB_PASSWORD;. Představte si, jak snadné by bylo zaseknout webové stránky! Co mě zastavit, včetně facebook.com/index.php?
  3. Pokud by to pak fungovalo a bylo to bezpečné, představte si pomalost! Uděláte požadavek na server, a pak server jde a dělá další pro záhlaví, a další pro postranní panel, a další pro zápatí, to vše čekající, kdo by mohl být obtěžován?
  4. Ale nakonec, i kdyby zahrnovaly i vzdálené požadavky. Co to nemůže, proč by se vrátil PHP kód? Nebude to vrátit, co server vyplivne, aka finalizovaný html? Server spustí všechny PHP před tím, než se vrátí, takže nebude existovat žádný PHP v tom, v čem je vaše zahrnuto.

Takže ne, to není možné. Rychlá kopie vloženého kódu do vašeho dotazu do skriptu PHP, po němž následuje rychlá návštěva, by vám to řekla rychleji než kdokoliv jiný.

Namísto toho můžete zahrnout pouze soubory z místního systému souborů, na kterém je server právě spuštěn. Nikdy byste nepředali URL do zahrnout nebo vyžadovat prohlášení.

Takže pokud jsem v index.php a existuje soubor ve stejné složce nazvaný sidebar.php, zahrnula bych ho takto:

include('sidebar.php');

include vrací hodnotu, pokud se to nezdařilo. Sémantika příkazu include jsou obecné základní PHP a jsou mimo toto téma na tomto webu.

Nicméně jsem nechal tuto otázku otevřenou, protože existuje funkce WordPress API, kterou byste měli používat místo toho, že je lepší než zahrnout a vyžadovat to, co potřebujete.

Chcete-li do šablony zahrnout součást šablony, použijte:

get_template_part( 'partname' );

Tato funkce se také podívá do podřízeného nebo nadřazeného motivu pro zadanou část.

Například v tomto kódu:

get_template_part( 'sidebar', 'first' );

Bude hledat a zahrnout první, které najde:

  • podřízený motiv sidebar-first.php
  • nadřazený motiv sidebar-first.php
  • podřízený motiv sidebar.php
  • nadřazený motiv sidebar.php

Je třeba poznamenat, že byste měli použít pouze get_template_part, abyste zahrnuli soubory se šablonami. Nepoužívejte jej k zahrnutí souborů, například knihoven, nebo jiných souborů PHP, které nemají výstup html.

Před pokračováním doporučujeme navrhnout následující témata:

  • zahrnout a vyžadovat funkce na PHP.Net
  • rodiče a podřízené motivy
  • hierarchii šablony a způsob, jakým WordPress vybere, kterou šablonu použít
  • <?php php ?> <?php tag ?> <?php spam ?> <?php and ?> <?php why ?> <?php its ?> <?php bad ?>
  • get_template_part
  • WP_HTTP API, pro ty pravé časy, které opravdu potřebujete udělat vzdálený požadavek na API. Funkce jako wp_remote_get a wp_remote_post vám pomohou.
  • Ladění PHP. Vaše bílé stránky jsou PHP Závažné chyby, ale protože máte nastavenou funkci protokolování chyb, která je skryje od začátku, je zaznamenána do souboru protokolu chyb, o kterém si nejste vědomi. Najděte si svůj chybový protokol, definujte WP_DEBUG ve vašem wp-config.php a nainstalujte plugin, jako je ladicí panel nebo monitor dotazů, což vám pomůže nesmírně. Nezapomeňte však zavolat wp_footer v zápatí šablon.
7
Tom J Nowell

předpokládejme, že máte toto cenario:

Vaše instalace wordpressu je umístěna v kořenové složce 'www' jako vaše stránky a vaše header.php je ve složce 'www/includes'.

Ve vás wordpress téma, jen přidat

[.] [php [.]] zahrnují ('zahrnuje/header.php'); [.]?> 

Když WordPress čte soubory motivů, používá kořenovou cestu.

2
eduardogoncalves

Nelze zahrnout externí zdroj do funkcí include()! Zahrnout práce podle vnitřní cesty serveru. Nelze zahrnout url, jak chcete. Je to bezpečnostní problém PHP!

Můžeš použít:

get_file_contents('http://your.url'); 

nebo použijte knihovnu Curl.

1
Giorgio Tedesco

Když jsem zkontroloval základní soubory následující je kód jsem našel v souboru wp/wp-includes/general-template.php pro funkci get_header()

našel jsem následující řádky

$templates[] = 'header.php';

locate_template( $templates, true );

Tak to používám v mém kódu (index.php) takhle

<?php get_header();

    $myphpfile[] = 'grid.php';
    locate_template( $myphpfile, true );
?>
0
abdul rashid

Téma pro dítě:

<?php echo get_stylesheet_directory_uri().'/subfoldername/add.php';?>

Můžeš použít

For Parent Theme: get_template_directory() or get_template_directory_uri()
For Child Theme: get_stylesheet_directory() or get_stylesheet_directory_uri()
0
Super Model