2016-06-17 18 views
0

Ich habe ein PHP-Objekt erstellt, damit ich besser mit meinen benutzerdefinierten Posts umgehen kann. Im Objekt habe ich eine Funktion, die das Objekt basierend auf dem Wordpress-Post auffüllen wird.Wordpress-Funktionen in einer benutzerdefinierten Klasse aufrufen

public function ByPost($post) { 
    $this->ID = $post->ID; 
    $this->Title = $post->post_title; 
    $this->Slug = $post->post_name; 
    $this->Description = $post->post_content; 
    $this->AlbumID = get_post_meta($post->ID, 'albumid', true); 
    return $this; 
} 

Ich rufe diese Methode dann aus der Schleife.

$album = Album::Get()->ByPost($post); 

Das Problem, das ich habe, ist, dass die get_post_meta Funktion nicht funktioniert. Wenn ich es außerhalb des Objekts anrufe, funktioniert es, aber innerhalb des Objekts bekomme ich nichts. Ich bekomme nicht einmal einen PHP-Fehler. Ich gehe davon aus, dass es entweder einen Namespace-Verweis oder etwas gibt, das ich vermisse, aber ich habe keine Ahnung, was das verursacht.

+0

Was haben Sie versucht, dies bis jetzt zu debuggen? z.B. Wird die Funktion aufgerufen, aber gibt nichts zurück? –

+0

es tut nichts. wenn ich var_dump() verwende. es tut nichts. –

Antwort

1

Innen Funktion definieren $post als globale und verwenden $post->ID

global $post; 
$this->AlbumID = get_post_meta($post->ID, 'sandbox_description', true); 

Sie müssen auch Funktionsargument Namen ändern.

ändern Sie function ByPost($post){ zu function ByPost($post_new){ oder etwas anderes und speichern Sie Daten in Array.

public function ByPost($post_new) { 
    global $post; 
    $data = array(); 
    $data['Title'] = $post_new->post_title; 
    $data['Slug'] = $post_new->post_name; 
    $data['Description'] = $post_new->post_content; 
    $data['AlbumID'] = get_post_meta($post->ID, 'sandbox_description', true); 
    return $data; 
} 
+0

Dies muss funktionieren, wenn es kein globales Post-Objekt gibt. wie in ich möchte in der Lage sein, eine Liste von Objekten und so weiter zu generieren. –

+0

Haben Sie es versucht? –

+0

Ich habe es dort versucht, hat nicht funktioniert. $ post wird als Variable an die Methode übergeben, sodass die Funktion keinen globalen Gültigkeitsbereich benötigt. Es muss etwas damit zu tun haben, dass die Klasse statisch ist. –

Verwandte Themen