Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Wordpress][PHP] Uruchamianie funkcji zefiniowanej przez wtyczkę
Forum PHP.pl > Forum > PHP
mikolajjj
Witam
Mam proste głupie pytanie – jak mam odwołać się w Wordpresie do funkcji zdefiniowanej przez jakąś wtyczkę? Chcę użyć takiej funkcji w prostym skrypcie (odpalanym ręcznie z palca, lub cronem).
Dokładnie chodzi mi o Pods Framework (wtyczka do definiowania Custom Post Type), w referencjach znalazłem funkcję dodającą treści do Custom Pods - (http://pods.io/docs/code/pods/add/), oryginalny przykład użycia wtyczki poniżej:

  1. <?php
  2. // Get the book pod object
  3. $pod = pods( 'book' );
  4.  
  5. // To add a new item, let's set the data first
  6. $data = array(
  7. 'name' => 'New book name',
  8. 'author' => 2, // User ID for relationship field
  9. 'description' => 'Awesome book, read worthy!'
  10. );
  11.  
  12. // Add the new item now and get the new ID
  13. $new_book_id = $pod->add( $data );
  14.  
  15.  
  16. // If you're already using Pods for another item
  17. $pod = pods( 'book', 4 );
  18.  
  19. // You can still an add item without effecting anything
  20. $new_book_id = $pod->add( $data );



Niestety skrypt wywala mi niezdefiniowaną funkcję, zwykłe includowanie do pliku z definicją funkcji nie pomaga, podobnie mam problem jak definiuję skrypt jako wtyczkę.
Co mam zrobić aby skrypt w fomie powyżej działał i mógł być umieszczony w dowolnym miejscu w instalacji Wordpressa?
Mile widziane najprostsze rozwiązania
dzięki
sowiq
Dodaj na początku Twojego pliku:

  1. include '../../sciezka/do/pliku/wp-load.php';


Uprzedzając pytanie dodam, że musisz tam podać ścieżkę do pliku wp-load.php z głównego katalogu Twojej instalacji WP.
mikolajjj
zrobiłem include wp-load.php z katalogu głównego i include do pliku z definicją funkcji. nadal mam undefined function. czy lokalizacja skryptu (np. jeśli jest po za znaczeniem pluginów) ma znaczenie? nie powinno chyba skoro odpalam skrypt ręcznie.
sowiq
A jesteś pewien, że wtyczka, o której piszesz, jest aktywna i że udostępnia taką funkcję?

Zrób prosty test - w pliku functions.php Twojej templatki dodaj:

  1. $pod = pods( 'book' );
  2. var_dump($pod);


Jeśli w dalszym ciągu dostaniesz błąd to znaczy, że musisz znaleźć i ręcznie include'ować plik, który tę funkcję definiuje.
mikolajjj
poniżej to co chę zrobić:

  1.  
  2. <?php
  3. include 'http://www.{mój adres}/wordpress/wordpress/wp-load.php';
  4. include 'http://www.{mój adres}/wordpress/wordpress/wp-content/plugins/pods/includes/classes.php';
  5. include 'http://www.{mój adres}/wordpress/wordpress/wp-content/plugins/pods/classes/Pods.php';
  6. include 'http://www.{mój adres}/wordpress/wordpress/wp-content/themes/twentytwelve/functions.php';
  7.  
  8. $pod = pods( 'events' );
  9.  
  10. // dane będą sobie pobierane skądinąd i dodawane jak poniżej
  11. $data = array('nazwa' => 'aaaa,
  12. 'miejsce' => 'aaaa'
  13. );
  14.  
  15. $new_event_id = $pod->add( $data );
  16.  
  17. ?>

działa tylko w jednym miejscu - function.php templatki (tam nie muszę incluidować, pobierane dane z wtyczki Pods) , tak, że za każdym refreshem jakiejkolwiek strony dodaje treść do postu typu event (czyli to co chcę osiągnąć), ale nie w ten sposób. chcę aby kod poniższy był odpalany ręcznie.

sama funkcja jest ok, robię jakieś złe adresowanie. funkcja traci aktywność poza plikiem functions.

na pewno dobrze includuję zgodnie z referencją dwóch funkcji przynależnych wtyczce Pods:
http://pods.io/docs/code/pods/
http://pods.io/docs/code/pods/add/

wszędzie indziej mam:
Call to undefined function pods()

także wtedy gdy tworzę wtyczkę tym samym kodem.


czy to może być kwestia, że nie opiewam całości add_action albo coś podobnego? chcę ingerować gołym prostym skryptem w dane CPT a nie w sam frontend.

robię jakiś bardzi głupi błąd, ale nie wiem jaki










[/php]
grzes999
Tutaj masz błąd

  1. include 'http://www.{mój adres}/wordpress/wordpress/wp-load.php';
  2. include 'http://www.{mój adres}/wordpress/wordpress/wp-content/plugins/pods/includes/classes.php';
  3. include 'http://www.{mój adres}/wordpress/wordpress/wp-content/plugins/pods/classes/Pods.php';
  4. include 'http://www.{mój adres}/wordpress/wordpress/wp-content/themes/twentytwelve/functions.php';


includy zrób ze ściążką do pliku a nie adres url, dodatkowo sprawdź czy te pliki istnieją.
mikolajjj
tak wiem, dodatkowo nie miałem wp-blog-header.php, a ten plik robi całą imprezę, działa)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.