Как вложить функцию WordPress в другую функцию WordPress? - PullRequest
0 голосов
/ 25 ноября 2010

Я работаю над темой 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' ); }' ); ?>

Ни один из них не работает.

Ответы [ 4 ]

1 голос
/ 25 ноября 2010

konforce верен в синтаксисе, и, как и konforce, я понятия не имею, что вы пытаетесь сделать.Вам не нужно использовать {}, потому что вы не пытаетесь динамически именовать переменную и вам точно не нужно переходить на php, используя <?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 />';
1 голос
/ 25 ноября 2010

Честно говоря, я не очень знаком с 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());
1 голос
/ 25 ноября 2010

Я действительно не знаю, хотите ли вы этого, потому что я не пытался понять, что вы делаете.Однако, вообще говоря, вы делаете это:

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

Редактировать:

Я посмотрел, что get_template_part() делает в WP, и я думаю, что ответ Феликса Клинга - то, что вам нужно.Существует большая разница между отправкой чего-либо на экран и присвоением его переменной.

<?php
  echo 'filename';
?>

Если вы включите этот файл, вы увидите filename в браузере.PHP ничего не знает об этом.(Хорошо, это возможно, если вы использовали функции буферизации вывода, но это не имеет значения ...)

Однако, если вы делаете что-то вроде:

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

Теперь вы можете использовать егов вашей функции:

<?php
  get_template_part($x);
?>

Итак, что Феликс говорит вам сделать, это поместить логику, которая у вас есть на данный момент, в функцию.В этом примере:

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

Вы можетевозьмите ответ Феликса и поместите его в файл с именем category_parent.php, а затем используйте его как:

require_once 'category_parent.php'
get_template_part(getName());
0 голосов
/ 25 ноября 2010

При использовании переменных в строках php вам нужно будет использовать двойные кавычки ("). Я предполагаю, что вариант 2 должен работать.

...