Dynamische Funktionsnamen in php
Ich möchte die Erstellung von "Custom Post Types" von WordPress, wie es ist mühsam zu gehen, die durch das gleiche Skript und ändern Sie alle benutzerdefinierten post-Typ-name-Instanzen manuell über und über.
Ist es ziemlich einfach zu erreichen, indem Sie erstellen eine variable, die die CPT-Namen und verwenden Sie es überall dort, wo es benötigt wird. Auf diese Weise, Alles, was ich zu tun ist, deklarieren Sie die variable am Anfang des Skripts und das sollte kümmern sich um den rest.
Das einzige Problem ist, dass, damit es funktioniert, ich muss auch das Präfix der CPT Namen vor jede Funktion im script und es scheint, dass die Verwendung einer Variablen in einer Funktion namens ist nicht einfach oder gar empfohlen, in der PHP.
So, wie könnte ich dieses Problem lösen?
Hier ist ein Beispiel unten an, um es klar zu sagen:
$prefix = 'news';
function news_custom_type_init()
{
global $prefix;
register_post_type($prefix, array(
'labels' => array(
'name' => $prefix,
'singular_label' => $prefix,
'add_new' => 'Add',
...
));
register_taxonomy_for_object_type( 'category', $prefix );
}
add_action('init', $prefix.'_custom_type_init');
Dies ist fast fein und könnte standardisiert werden, wenn ich nur könnte dynamisch benennen Sie die Funktion, um nicht zu schreiben, das Wort "news" vor, aber verwenden Sie das "$prefix" statt.
Könnte dies schön gewesen, aber funktioniert einfach nicht:
$prefix = 'news';
$functionName= $prefix."_custom_type_init";
function $functionName()
{
global $prefix;
register_post_type($prefix, array(
'labels' => array(
'name' => $prefix,
'singular_label' => $prefix,
'add_new' => 'Add',
...
));
register_taxonomy_for_object_type( 'category', $prefix );
}
add_action('init', $prefix.'_custom_type_init');
Dass Namen manuell die Funktion irgendwie Niederlage der Zweck von meinen versuchen (vor allem, wenn das Drehbuch bettet Dutzende von Funktionen wie diese).
Was wäre der beste Weg, dies zu tun?
PS: ich habe gegoogelt und "stackoverflowed" viel über diese aber nicht finden, eine funktionierende Lösung, die zu meinen Anforderungen passen und nicht erzeugen eine WordPress-Fehlermeldung.
Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach genug, hier ist ein ähnlicher Schnitt form eines Projekts:
Dies ist ein Alter thread, sondern einfach anonyme Funktionen:
Dann gibt es keine Notwendigkeit zu erklären, so viele Funktionen.
Bearbeiten (2017-04): Anonyme Funktionen (richtig implementiert) sind der Weg zu gehen, siehe die Antwort von David Vielhuber.
Diese Antwort ist schlecht beraten, da ist jeder Ansatz, der beinhaltet, dass die code-als-string, denn dieser lädt (unter anderem) Verkettung.
Ich bin nicht sicher, ob es ratsam ist, zu verwenden, oder, wenn es dir hilft, aber php können Sie erstellen, die "anonyme" Funktionen :
Ich gehe davon aus, dass add_action nur fordert, was auch immer Funktion, die Sie übergeben.
http://php.net/manual/en/function.create-function.php
Hinweis: create_function wird nicht wieder eine Funktion mit dem Namen, den Sie wollen, aber der Inhalt der Funktion wird unter Ihrer Kontrolle sein, und der echte name der Funktion ist nicht wichtig.
Ich denke, Sie könnte verwenden
runkit_function_add
http://php.net/manual/pl/function.runkit-function-add.php
Eine andere verfügbare Methode ist die Verwendung
eval()
Dieser Beitrag ist alt, aber PHP 7 lösen können, diese Frage.
Versuchen:
Ich denke, es sollte funktionieren für WordPress.