如何将一个 WordPress 函数嵌套在另一个 WordPress 函数中?

发布于 2024-10-04 11:17:12 字数 821 浏览 1 评论 0原文

我正在开发一个 WordPress 主题,并尝试调用父类别的名称来提取适当的页面模板。

我可以让调用函数回显正确的名称,但是当我尝试嵌套它时,该函数不会运行。我发现我需要使用 { } 因为我已经在 php 中了,但它仍然无法正常工作。有人可以纠正我吗?

这给出了正确的输出:

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

。 。 。所以我创建了一个category_parent.php 文件,其中包含该文件。

这就是我试图将其嵌套在其中的内容:

<?php get_template_part( ' ' ); ?>

像这样:

1.

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

或这个

2.

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

两者都不起作用。

I'm working on a wordpress theme and I'm trying to call the parent category's name to pull the appropriate page template.

I can get the call function to echo the correct name, but when I try to nest it the function doesn't run. I saw that I needed to use { } since I was already inside php but it still isn't working right. Can someone straighten me out?

This gives the correct output:

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

. . . so I created a category_parent.php file with that in it.

This is what I'm trying to nest it in:

<?php get_template_part( ' ' ); ?>

Like this:

1.

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

or this

2.

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

Neither one works.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

吹泡泡o 2024-10-11 11:17:12

我真的不知道这是否是你想要的,因为我没有试图理解你在做什么。然而,一般来说,你这样做:

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

编辑:

我查了一下 get_template_part() 在 WP 中的作用,我认为 Felix Kling 的答案就是你所需要的。将某些内容发送到屏幕和将其分配给变量之间存在很大差异。

<?php
  echo 'filename';
?>

如果包含该文件,您将在浏览器中看到filename。 PHP对此一无所知。 (好吧,如果你使用输出缓冲函数,那就可以了,但这不是重点......)

但是,如果你做了类似的事情:

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

你现在可以在你的函数中使用它:

<?php
  get_template_part($x);
?>

那么Felix告诉你要做的就是把您当前在函数中拥有的逻辑。在此示例中:

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

  get_template_part(foo());
?>

现在 foo() 返回的任何值都将发送到您的 get_template_part()

获取您的代码:

$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);

您可以获取 Felix 的答案并将其放入名为 category_parent.php 的文件中,然后使用它,如下所示:

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

I really don't know if this is what you want as I did not try to make sense of what you are doing. However, generally speaking, you do this:

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

Edit:

I looked up what get_template_part() does in WP, and I think Felix Kling's answer is what you need. There is a big difference between sending something to the screen and assigning it to a variable.

<?php
  echo 'filename';
?>

If you include that file, you will see filename in the browser. PHP knows nothing about it. (Okay, it could if you made use of output buffering functions, but that's besides the point...)

However if you do something like:

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

You can now use it in your function:

<?php
  get_template_part($x);
?>

So what Felix is telling you to do is to put the logic that you currently have into a function. In this example:

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

  get_template_part(foo());
?>

Now whatever value foo() returns will be sent to your get_template_part().

Taking your 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);

You could take Felix's answer and put it into a file called category_parent.php, and then use it like:

require_once 'category_parent.php'
get_template_part(getName());
静若繁花 2024-10-11 11:17:12

老实说,我对 WordPress 不太熟悉,但在我看来,你可以这样做:

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());

Honestly I am not so familiar with Wordpress, but it seems to me, you could do:

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());
2024-10-11 11:17:12

konforce 的语法是正确的,就像 konforce 一样,我不知道你想做什么。您不需要使用 { } 因为您没有尝试动态命名变量,并且您当然不需要使用 转义到 php,因为 (1) 您已经在 php 中,并且 (2) 当它遇到第一个“?>”时,它将停止解释 PHP 并假定为 html。

嵌套函数没有特殊的语法。简单地说:

get_template_part(get_template_part('category_parent'));

是语法,但我不知道该函数是什么或做什么,所以我不知道这是否有效。

要调试,为什么不试试这个:

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

konforce is correct about the syntax and, like konforce, I have no idea what you are trying to do. You do not need to use { } because your are not trying to dynamically name a variable and you certainly don't need to escape to php using <?php ?>, as (1) you are already in php and (2) it will stop interpreting PHP and assume html the second it hits the first '?>'.

There is no special syntax for nesting functions. Simply:

get_template_part(get_template_part('category_parent'));

is the syntax, but I have no idea what the function is or does, so I have no idea if that will work.

To debug, why don't you try this:

$parent = get_template_part('category_parent');
echo 'parent: ' . $parent . '<br />';
$result = get_template_part($parent);
echo 'result: ' . $result . '<br />';
猫烠⑼条掵仅有一顆心 2024-10-11 11:17:12

在 php 字符串中使用变量时,您需要使用双引号 (")。我认为选项 2 应该可以工作。

When using variables in php strings, you will need to use double quotes ("). I assume option 2 should work then.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文