Includerea unui fișier PHP extern într-un șablon personalizat WordPress

26 aug. 2013, 10:31:53
Vizualizări: 88.4K
Voturi: 7

Este posibil să includem un fișier PHP extern într-un șablon personalizat?

Încerc să adaug un blog în site-ul meu. Am deja layout-ul pentru header, footer și sidebar în site. Pot folosi aceste elemente în șablonul meu personalizat?

<?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('Etichete: ', ', ', '<br />'); ?>
    Publicat în
    <?php the_category(', ') ?>
    |
    <?php comments_popup_link('Fără comentarii &#187;', '1 Comentariu &#187;', '% Comentarii &#187;'); ?>
  </div>
</div>
<?php endwhile; ?>
<div class="mypagination">
  <?php include (TEMPLATEPATH . '/inc/nav.php' ); ?>
</div>
<?php else : ?>
<h2>Nu a fost găsit</h2>
<?php endif; ?>
<?php include( PATH . 'http://www.example.com/includes/sidebar.php' );  ?>
<?php include( PATH . 'http://www.example.com/includes/footer.php' );  ?>

Am încercat și:

<?php include('http://mywebsite.com/includes/header.php'); ?>
4
Comentarii

Aruncă o privire la http://codex.wordpress.org/Integrating_WordPress_with_Your_Website, ar trebui să îți răspundă la întrebare.

Mark Davidson Mark Davidson
26 aug. 2013 10:37:28

Poți să-l folosești. Ce problemă întâmpini?

Vinod Dalvi Vinod Dalvi
26 aug. 2013 10:39:35

Bună, tocmai am copiat fișierele mele în folderul WordPress și le-am conectat corespunzător.. Oricum, care este răspunsul la această întrebare? Primesc doar o pagină albă goală

Jeremi Liwanag Jeremi Liwanag
26 aug. 2013 17:07:19

Pentru a fi clar, încerci să incluzi fișiere care sunt localizate pe un site extern? Dacă da, permisiunile curente ale fișierelor PHP de pe acel site permit accesul public de citire la aceste fișiere?

iyrin iyrin
13 feb. 2014 16:08:13
Toate răspunsurile la întrebare 6
0

Nu, nu poți include fișiere PHP într-o temă în modul indicat de tine.

Pentru a înțelege de ce, trebuie doar să aplicăm puțină logică și gândire critică:

  1. Ai face o solicitare la distanță către un server la distanță, iar funcția include nu poate face acest lucru
  2. Dacă prin vreun miracol ar funcționa, ai avea o mare vulnerabilitate de securitate, deoarece aș putea face ceva de genul: include( 'http://siteultau/wp-config.php' ); echo DB_PASSWORD;. Îți poți imagina cât de ușor ar fi să hack-uiți site-uri! Ce mă oprește să includ facebook.com/index.php?
  3. Chiar dacă ar funcționa cumva și ar fi sigur, gândește-te la încetinirea pe care o provoacă! Faci o cerere către server, apoi serverul face altă cerere pentru header, altă pentru sidebar, altă pentru footer - toate astea în așteptare, cine ar avea răbdare?
  4. Și în final, chiar dacă include ar putea face cereri la distanță (ceea ce nu poate), de ce ar returna cod PHP? Nu ar returna ceea ce serverul trimite înapoi, adică HTML-ul final? Serverul rulează orice PHP înainte de a returna, deci nu ar fi cod PHP în ceea ce incluzi.

Deci nu, nu este posibil. Dar un simplu copy-paste al codului din întrebarea ta într-un script PHP urmat de o vizitare rapidă ți-ar fi spus asta mai repede decât oricine de aici.

În schimb, poți include doar fișiere din sistemul de fișiere local pe care rulează serverul tău. Nu trebuie să transmiți niciodată o URL către o instrucțiune include sau require.

De exemplu, dacă sunt în index.php și există un fișier în același director numit sidebar.php, l-aș include astfel:

include('sidebar.php');

include returnează o valoare dacă operațiunea eșuează. Semantica instrucțiunii include face parte din PHP de bază și este în afara subiectului acestui site de întrebări și răspunsuri.

Totuși, am păstrat această întrebare deschisă pentru că există o funcție API WordPress pe care ar trebui să o folosești în loc, care este mai bună decât include și require pentru ceea ce ai nevoie.

Pentru a include o parte de template într-o temă, folosește:

get_template_part( 'partname' );

Această funcție va căuta partea specificată atât în tema copil cât și în tema părinte.

De exemplu, în acest cod:

get_template_part( 'sidebar', 'first' );

Va căuta și va include primul fișier găsit dintre următoarele:

  • tema copil sidebar-first.php
  • tema părinte sidebar-first.php
  • tema copil sidebar.php
  • tema părinte sidebar.php

Este important de menționat că get_template_part trebuie folosit doar pentru a include fișiere de template. Nu-l folosi pentru a include fișiere precum biblioteci sau alte fișiere PHP care nu afișează HTML.

Sugerez să citești despre următoarele subiecte înainte de a continua:

  • funcțiile include și require pe PHP.Net
  • teme părinte și copil
  • ierarhia de template-uri și cum alege WordPress ce template să folosească
  • <?php php ?> <?php tag ?> <?php spam ?> <?php and ?> <?php why ?> <?php its ?> <?php bad ?>
  • get_template_part
  • API-ul WP_HTTP, pentru acele cazuri când chiar ai nevoie să faci o cerere la distanță către un API. Funcții precum wp_remote_get și wp_remote_post te vor ajuta aici.
  • Depanarea PHP. Paginile albe sunt erori PHP Fatale, dar pentru că ai setat logging-ul de erori să le ascundă în front-end, acestea sunt înregistrate într-un fișier de log de care nu ești conștient. Găsește fișierul tău de log, definește WP_DEBUG în wp-config.php și instalează un plugin precum debug bar sau query monitor - acestea te vor ajuta enorm. Asigură-te că apelezi wp_footer în footer-ul template-ului tău.
25 mar. 2014 02:31:04
0

presupunem că ai acest scenariu:

Instalarea ta WordPress este găzduită în folderul root 'www' ca site-ul tău, iar fișierul header.php este în folderul 'www/includes'.

În tema ta WordPress, adaugă doar

<?php
include('includes/header.php');
?>

Când WordPress citește fișierele temei, folosește calea root.

13 feb. 2014 13:37:39
1

Nu poți include o resursă externă în funcțiile include()! Include funcționează prin căi interne ale serverului. Nu poți include un URL după cum dorești. Aceasta reprezintă o problemă de securitate în PHP!

Poți folosi:

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

sau să utilizezi o bibliotecă Curl.

3 feb. 2014 11:35:08
Comentarii

Adaugă o explicație detaliată la răspunsurile tale pentru a ajuta utilizatorul să înțeleagă punctul tău de vedere.

Maruti Mohanty Maruti Mohanty
3 feb. 2014 13:11:50
0

Pentru Child Theme:

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

Puteți folosi

Pentru Parent Theme: get_template_directory() sau get_template_directory_uri()
Pentru Child Theme: get_stylesheet_directory() sau get_stylesheet_directory_uri()
24 apr. 2018 16:04:10
0

Când am verificat fișierele de bază, am găsit următorul cod în fișierul wp/wp-includes/general-template.php pentru funcția get_header()

Am găsit următoarele linii:

$templates[] = 'header.php';

locate_template( $templates, true );

Așadar, folosesc acest cod în fișierul meu (index.php) astfel:

<?php get_header();

    $myphpfile[] = 'grid.php';
    locate_template( $myphpfile, true );
?>
12 ian. 2017 10:16:29
0

Poate nu este cea mai bună practică să postez la o întrebare atât de veche, dar recent am avut nevoie să fac ceva similar și am găsit acest rezultat folosind o metodă care nu este prezentată aici. O notez pentru viitorii exploratori ;).

Cazul meu de utilizare a fost:

  • Wordpress instalat într-un subdirector
  • Am vrut să includ elemente de footer/header de la site-ul părinte, în loc să folosesc Wordpress pentru aceste elemente

Deoarece include() sau require() pot folosi căi absolute pe server (de exemplu: /var/www/vhosts/foo.bar/httpdocs/includes/baz.php), putem folosi definiția ABSPATH din Wordpress pentru a genera aceasta:

include( dirname( ABSPATH ) . '/includes/header.php' );

acesta va returna /var/www/vhosts/foo.bar/httpdocs/includes/baz.php.

Chiar și atunci când Wordpress este într-un subdirector (de exemplu: /var/www/vhosts/foo.bar/httpdocs/blog/), dirname( ABSPATH ) ne oferă rădăcina documentului indiferent de situație.

Pot exista și alte modalități de a face acest lucru, folosind de exemplu superglobalul $_SERVER['DOCUMENT_ROOT'], dar nu am explorat această variantă.

5 mai 2020 02:01:48