2010-11-24 10 views
0

Ich arbeite an einem Wordpress-Thema und ich versuche, den Namen der übergeordneten Kategorie aufzurufen, um die entsprechende Seitenvorlage zu ziehen.Wie verschachtle ich eine Wordpress-Funktion in einer anderen Wordpress-Funktion?

Ich kann die Aufruffunktion den richtigen Namen echo, aber wenn ich versuche, es zu verschachteln, wird die Funktion nicht ausgeführt. Ich sah, dass ich {} verwenden musste, da ich bereits in PHP war, aber es funktioniert immer noch nicht richtig. Kann mich jemand aufrichten?

Dies gibt die korrekte Ausgabe:

<?php $category = get_the_category(); 
$parent = get_cat_name($category[0]->category_parent); 
if (!empty($parent)) { 
echo '' . $parent; 
} else { 
echo '' . $category[0]->cat_name; 
} 
?> 

. . . also habe ich eine category_parent.php-Datei mit dem darin erstellt.

Dies ist, was zu nisten es Ich versuche, in:

<?php get_template_part(' '); ?> 

So:

1.

<?php get_template_part('<?php get_template_part('category_parent'); ?>'); ?> 

oder diese

2.

<?php get_template_part('{get_template_part('category_parent'); }'); ?> 

keiner funktioniert.

Antwort

1

Ich weiß wirklich nicht, ob dies das ist, was Sie wollen, weil ich nicht versucht habe, einen Sinn zu machen, was Sie tun. Aber allgemein gesprochen, Sie dies tun:

<?php get_template_part(get_template_part('category_parent')); ?> 

Edit:

Ich sah, was get_template_part() in WP tut, und ich denke Antwort Felix Kling ist das, was Sie brauchen. Es ist ein großer Unterschied, ob Sie etwas an den Bildschirm senden und es einer Variablen zuweisen.

<?php 
    echo 'filename'; 
?> 

Wenn Sie diese Datei enthalten, werden Sie filename im Browser sehen. PHP weiß davon nichts. (Okay, es könnte, wenn Sie den Einsatz von Ausgabepufferung Funktionen gemacht, aber das ist neben dem Punkt ...)

Allerdings, wenn Sie so etwas wie:

<?php 
    $x = 'filename'; 
?> 

Sie nun in Ihrer Funktion nutzen zu können:

Felix sagt Ihnen also, dass Sie die Logik, die Sie gerade haben, in eine Funktion bringen. In diesem Beispiel:

<?php 
    function foo() 
    { 
    return 'filename'; 
    } 

    get_template_part(foo()); 
?> 

nun unabhängig von Wert foo() kehrt wird Ihre get_template_part() gesendet werden.

Taking Code:

$category = get_the_category(); 
$parent = get_cat_name($category[0]->category_parent); 
if (!empty($parent)) { 
    $name = $parent; 
} else { 
    $name = $category[0]->cat_name; 
} 

get_template_part($name); 

Sie Felix Antwort nehmen und es in eine category_parent.php, die so genannte Datei setzen und es dann gerne verwenden:

require_once 'category_parent.php' 
get_template_part(getName()); 
+0

der ‚category_parent‘ Teil ist immer noch tot in diesem Fall. es versucht, "category_parent.php" zu finden, anstatt "categoryname.php" zu finden – Jason

+0

Vielleicht stelle ich die falsche Frage? Ich möchte, dass das Kategorie-Eltern-Skript aufgerufen wird und die Antwort Teil des anderen get_template_part ist. – Jason

+0

Ich habe meine Antwort aktualisiert. – Matthew

-1

Wenn Variablen in PHP-Strings verwenden, können Sie muss verwenden doppelte Anführungszeichen ("). Ich nehme an, Option 2 sollte dann funktionieren.

+0

, die nicht für Funktionen funktioniert. – Stephen

+0

so? Es "tötet" immer noch irgendeinen Code innerhalb der Anführungszeichen, so dass er nicht ausgeführt wird. – Jason

+0

Sorry, ich versuchte es nie für Funktionen, so war sich nicht sicher, ob das funktionieren würde oder nicht, aber es scheint, wird –

1

Ehrlich gesagt bin ich nicht so vertraut mit Wordpress, aber es scheint mir, Sie könnten tun:

function getName() { 
    $category = get_the_category(); 
    $parent = get_cat_name($category[0]->category_parent); 
    if (!empty($parent)) { 
     return '' . $parent; 
    } else { 
     return '' . $category[0]->cat_name; 
    } 
} 

get_template_part(getName()); 
+0

Dank nicht :), dass ein Teil die richtige Antwort zurückkehrte, wurde ich es nur für den Fall, einschließlich das war verursachen, dass etwas anderes nicht richtig funktioniert. – Jason

1

konforce ist korrekt über die Syntax und, wie konforce, ich habe keine Ahnung, was Sie zu tun versuchen. Sie brauchen nicht zu verwenden, {}, weil Ihr nicht dynamisch versuchen, eine Variable zu nennen und Sie sicherlich brauchen nicht zu PHP zu entkommen <?php ?> verwenden, wie (1) Sie bereits in PHP sind und (2) es wird aufhören PHP Interpretation und nehme html an, die zweite trifft das erste '?>'.

Es gibt keine spezielle Syntax für die Verschachtelung Funktionen. Einfach gesagt:

get_template_part(get_template_part('category_parent')); 

ist die Syntax, aber ich habe keine Ahnung, was die Funktion ist oder tut, so habe ich keine Ahnung, ob das funktionieren wird.

Zum Debuggen, warum Sie dies nicht versuchen:

$parent = get_template_part('category_parent'); 
echo 'parent: ' . $parent . '<br />'; 
$result = get_template_part($parent); 
echo 'result: ' . $result . '<br />';