Eklentilere PHP dosyaları nasıl eklenir?


59

Benim sorunum ana eklenti dosyasında şöyle bir PHP dosyası eklerim:

include(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
include_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');

ve bu dosya üzerinde şöyle bir WordPress işlevine bir çağrı var:

add_action('hook', 'callback');

ve alıyorum:

Önemli Hata: Tanımsız fonksiyona çağrı add_action ()

Şimdi "kullan if(**function_exists**('add_action')){" demeden önce onu kullanırsam o zaman işe yaramaz.

Sorular:

  • Bunu yapmanın doğru yolu ne olurdu?
  • Ne arasındaki farktır include, include_once, requireve ne zaman ben cadı kullanmak?

Bu mesajı alırsan yanlış bir şey yapıyorsun. Bu dosyalardan işlevleri çalıştırmaya başlamadan önce herhangi bir dosya
eklediğinizden

bu hayır, çağrılar dahil olduğum dosyaların içinde!
Bainternet

lol, şimdi WP_PLUGIN_URLyukarıdaki kodunuzda görüyorum :)
onetrickpony

3
Çok basit bir şekilde, () dosyalarını bir UR'ye değil, bir dosya yolu üzerinden dahil edebilirsiniz.
editör

1
Bu Codex makalesi (muhtemelen sorunuzu sorduktan sonra yazılmıştır) oldukça yararlıdır: codex.wordpress.org/Determining_Plugin_and_Content_Directories
henrywright

Yanıtlar:


88

Bu partiye geç geliyor, ama işte "WordPress" yolu: use plugin_dir_path( __FILE__ ), örneğin:

<?php
include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php');
?>

İşlev Not etmez geri eğik çizgi yolu için.


3
Kullanarak __FILE__aradığınız geçerli dosyaya göre çıktı alacağına dikkat edin, bu nedenle includeifadeniz eklenti dosya yapınızın içindeki bir alt dizinden yapılırsa, alt dizini de geri alacağınızı unutmayın.
squarecandy

Alternatif - eğer İHTİYACINIZ göreli yollar vardırrequire_once(plugin_dir_path(__DIR__).'/myfile.inc');
FoggyDay

10

Eklentilerin içine fazladan dosyalar eklememin farklı yollarını görmek için daha önce oluşturduğum birkaç eklentiyi araştırdım ve kullanabileceğiniz iki yöntem olduğunu fark ettim, muhtemelen daha fazlası da var.

Eklenti dizini tanımla

Eklentinizin içinde, mevcut eklenti konumunu tanımlamak için aşağıdaki tanımlamalar bulunur.

Örnek kod:

define( 'PLUGIN_DIR', dirname(__FILE__).'/' );  

Sadece düz bir yukarı dahil veya gerek

Basitçe kullanabilirsiniz; include, include_once, request veya need_once eklenti klasörünün içinde aşağıdaki örnek kodda olduğu gibi konuma bakarak. Aşağıdaki örnek, eklenti klasörünüzün içindeki bir klasör içindeki başka bir dosyayı içeren kök eklenti dizininizdeki bir dosyaya dayanacaktır.

Örnek kod:

include "classes/plugin-core.php";

akraba, her türlü kötü beklenmedik sorunları doğurabilir.
Mark Kaplun

5

Aşağıdakileri içeren WordPress yapıları ile uğraşıyorum ve aşağıdakileri kullanıyorum:

require_once(dirname(__FILE__) . '/filename.php);

Aslında, kapsam sorunu gibi görünen sorununuzu çözeceğini sanmıyorum, ancak kullandığım kod bu.

Dahildir ve ihtiyaç arasındaki fark gelince:
Bir atacağım dahil uyarı dosyası bulunmazsa
bir atacağım gerektiren önemli bir hatayla dosyası bulunmazsa

include_once ve request_once, zaten dahil edilmiş / gerekliyse, dosyayı / kodu tekrar içermeyecek / gerektirmeyecek (bildiğim kadarıyla, bunun yalnızca belirli bir dizindeki belirli bir dosya için olduğunu unutmayın).


5

İlk önce cevaplayan herkese teşekkür ederim.

Benim sorunum, içerdiği dosyaları tam URL ile çağırıyorlardı, WordPress'e girmiyorlardı. ve bu oldu çünkü soru üzerine söylediğim gibi onları ana eklenti dosyasından çağırıyordum. bu yüzden düzeltme kullanarak sona erdi:

include_once('/ipn/paypal-ipn.php');

WordPress desteğinde okudum . ve cevapladığınız için tekrar teşekkürler!


Lütfen bu cevabı ( wordpress.stackexchange.com/a/32002/123092 ) kabul edilmiş olarak işaretlemeyi tekrar düşünebilir misiniz ?
En Aptal

4

Dahil etmek

İnclude () ifadesi belirtilen dosyayı içerir ve değerlendirir.

Bir Kez Dahil Et

İnclude_once () deyimi, betiğin yürütülmesi sırasında belirtilen dosyayı içerir ve değerlendirir. Bu, include () ifadesine benzer bir davranış, tek fark, bir dosyadaki kod zaten eklenmişse, tekrar eklenmeyecek olmasıdır. Adından da anlaşılacağı gibi, sadece bir kez eklenecektir.

Gerekmek, gerektirmek, gerektirir, icap etmek

request () ve include () başarısızlıkla nasıl başa çıktıkları hariç her şekilde aynıdır. Her ikisi de bir Uyarı üretir, ancak zorunlu () bir Ölümcül Hata ile sonuçlanır. Başka bir deyişle, eksik bir dosyanın sayfanın işlenmesini durdurmasını istiyorsanız, tereddüt etmeyin.

Bir Kere Gerektir

Request_once () deyimi, betiğin yürütülmesi sırasında belirtilen dosyayı içerir ve değerlendirir. Bu, request () ifadesine benzer bir davranıştır, tek fark, bir dosyadaki kod zaten eklenmişse, tekrar eklenmeyecek olmasıdır.

Yukarıdaki bilgi PHP belgelerine aittir, doğru olanı yoktur, kodun ihtiyacına bağlı olur, fonksiyonlar gibi önemli şeylere () ihtiyacım olur, ancak altbilgi veya kullandığım döngü gibi tema dosyalarına include_once veya include çünkü ben uyarı işleyebilir ve sadece bir fatal_error yerine bir hata oldu kullanıcı / ziyaretçi söyleyebilirim


@Mtekk'ın dediği gibi, sizden bu yapıyı kullanmanızı tavsiye ederim: requ_once (dirname ( FILE ). '/Filename.php);
Webord

1

Merhaba @ תיית אתרים:

WordPress yüklenirken herhangi bir eklentiyi yüklemeye add_action()çalışmadan önce fonksiyonu tanımlar. Hata alıyorsanız, garip bir şey yaptığınızı veya WordPress kurulumunuzda bir şeylerin yanlış olduğunu söyler.

"Eklentinizi" yüklemek için kimi kullanıyorsunuz ? Dosyanızda belki yüklemek için include*()veya kullanıyor musunuz ?require*()wp-config.php


1
include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php');

veya

define( 'PLUGIN_ROOT_DIR', plugin_dir_path( __FILE__ ) );
include( PLUGIN_ROOT_DIR . 'ipn/paypal-ipn.php');

veya

$plugin_dir_path = plugin_dir_path( __FILE__ );
include( $plugin_dir_path . 'ipn/paypal-ipn.php');

Not: admin_enqueue_scriptsEklenti kullanımı içindeki .css ve .js dosyalarını sıkıştırmak içinplugin_dir_url( __FILE__ )

$plugin_dir_uri = plugin_dir_url( __FILE__ );
wp_enqueue_style( 'plugin-style', $plugin_dir_uri . 'css/plugin-style.css');

0

Çalışma dizininizde ne zaman yeni bir dosya oluşturursanız, onu her zaman eklemeniz gerekir. Ancak, doğrudan yönlendirmek ve otomatik olarak bağlamak için bir yöntem deneyin, sadece php dosyalarını değil, php, js ve css fiules'lerini her iki tarafa da (arka uç, ön uç) düzgün bir şekilde dahil etmenize yardımcı olur.

http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/


1
Lütfen cevabınıza verilen linkten ilgili bilgileri ekleyin. Bağlantıyı kredi amaçlı kullanın. Lütfen sorunuzu düzenleyin
Pieter Goosen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.