Wordpress: Вставить оператор if-else в параметры next_post_link () / previous_post_link ()? - PullRequest
6 голосов
/ 18 июня 2011

Первый вопрос здесь, хотя чтение и поиск несколько раз спасли мой бекон.

Я хакер PHP в лучшем случае, и тема Wordpress, которую я создаю, заставляет меня многому научиться.

Я столкнулся с проблемой при попытке по-разному отображать форматы следующих и предыдущих ссылок в зависимости от их соответствующих категорий (а не страницы single.php).

Вот моя лучшая попытка на данный момент:

<?php next_post_link(
    '%link',
    if ( in_category( 'tweet' ) ) {
        get_the_content()
    } else {
        echo '%title'
    };,
    FALSE 
)?>

Это приводит к синтаксической ошибке.

Мой первый вопрос: Могу ли я даже использовать оператор if-else в параметрах функции?

Если я подхожу к нему совершенно неверным образом, тогда он возвращается к чертежной доске. Тогда я буду признателен за любые альтернативные предложения!

Мне известны следующие работы:

next_post_link( '%link', get_the_title(), FALSE );
next_post_link( '%link', '%title', FALSE );

Чтобы попытаться быть более понятным, я пытаюсь повлиять на вывод следующих / предыдущих ссылок на основе категории самих ссылок, а не текущей страницы хоста, на которой они находятся.

У меня проблема в том, что а) как определить, к какой категории относятся next_post_link () и previous_post_link (), а затем б) отобразить их параметр Link соответственно. Если я могу выкинуть белый флаг, то примеры, которые я нашел с помощью get_adjacent_post () и различных массивов и тому подобного, кажутся мне нереальными на данный момент. Я был бы очень признателен, если бы кто-нибудь помог мне с решениями.

Ответы [ 3 ]

2 голосов
/ 18 июня 2011

К чему стремиться?

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

Начните формулировать, чего вы хотите достичь.Если я вас правильно понял, вы пишете, что хотите отображать следующие и предыдущие ссылки под текущим сообщением по-разному в зависимости от категории.

Но какая категория?Один из текущего сообщения , который отображается?Или категория предыдущая / следующая ссылка ?

Рядом с этим сообщения могут иметь несколько категорий.Вы хотите изменить отображение на основе одной или нескольких или даже всех категорий?

И, наконец: Вы хотите вывести тонны HTML-тегов для визуального оформления?Или вы хотите использовать CSS для этого.

Как это сделать?

После того, как вы подумали о , что вы действительно хотите достичьВы можете подумать, как это можно сделать.

Далее я покажу пример кода, который будет выполнять следующее:

  • Объясняетиспользование параметра link-format , который вы хотите изменить.
  • Показывает, как получить CSS-классы для рассматриваемых ссылок.
  • Расширяет вывод темы с помощьюэти CSS-классы.
  • Сделайте его повторно используемым для различных файлов в вашей теме.

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

PHP-код

PHP довольно гибок, так что в конце концов это легко сделать, но не зная, что именно делать, эта гибкость в PHP можетоказаться проблемой, потому что это также можно потерять следи затем кодируем что-то нерабочее.

Скажем так, вы просто хотите изменить формат ссылки для функции next_post_link().

Функция заменит %link тегом HTML-ссылки (<a href=...>Post Title</a>), поэтому, если вы возьмете 'This is the next post of my blog: %link; waiting to be read!' в качестве параметра, вы добавите текст вокруг ссылки.

<?php
  $format = 'This is the next post of my blog: %link; waiting to be read!';
  next_post_link($format);
?>

Вы можетедополнительно добавьте HTML-теги вокруг него:

<?php
  $format = '<span style="font-size:2em">%link</span>';
  next_post_link($format);
?>

, что сделает все ссылки на следующие посты двойным стандартным размером шрифта.

Так что теперь сделать это немного прощедля создания тем лучше всего было бы добавить классы CSS категории / категорий, тогда вы можете легко изменить отображение в CSS.

<?php
  $inSameCategory = true; // depends on what you want, can be false as well
  $nextPost = get_adjacent_post($inSameCategory, '', false);
  $cssClasses = get_post_class('next-post-link ', $nextPost);
  $format = sprintf('<span class="$s>%link</span>', $cssClasses);
  next_post_link($format);    
?>

Это приведет к тому, что ссылка на следующий пост будет преобразована в <span>, содержащий все CSS-классы связанного поста плюс класс next-post-link на случай, если это понадобится CSS-селектору для стилизации ссылок.Вот несколько примеров CSS:

.next-post-link.category-tweet {font-size: 2em;}

Создание возможности повторного использования

Поскольку у вас есть следующая и предыдущая ссылка, вы можете скопировать этот код только для изменения одного параметра.Но мы ленивы, и вместо этого мы оборачиваем ее в собственную функцию:

  /**
   * my theme's format string for prev|next_post_link()
   *
   * @param bool $previous (optional) previous (true, default) or next (false) post
   * @param bool $inSameCategory (optional) use same category, default: true
   * @return string
   */
  function my_prev_next_link_format($previous = true, $inSameCategory = true) {
    $postId = get_adjacent_post($inSameCategory, '', $previous);
    $cssClasses = get_post_class('next-post-link ', $nextPost);
    $format = sprintf('<span class="$s>%link</span>', $cssClasses);
    return $format;
  }

Поместите эту функцию в functions.php вашей темы.Это доступно тогда во всех ваших шаблонах.Его использование теперь стало очень простым:

<?php prev_post_link(my_prev_next_link_format()); ?>
...
<?php next_post_link(my_prev_next_link_format(false)); ?>

Если вы все это соединили, вы можете легко оформить следующие и предыдущие ссылки в CSS вашей темы.

0 голосов
/ 18 июня 2011

Попробуйте:

$format_string = in_category('tweet') ? 
'<span style="color:red;">%link</span>' : '%link';

next_post_link($format_string);

Второй и третий параметры являются необязательными и по умолчанию имеют заголовок и значение false.

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

Я не знаю этот плагин,но ..

if(in_category('tweet')){
$format_string = '<span style="color:red;">%link</span>';
$link_text = get_the_content();
}else{
$format_string = '%link';
$link_text = '%title';  
}

next_post_link($format_string, $link_text);
0 голосов
/ 18 июня 2011

Вы пробовали анонимные функции ? Таким образом, вы можете использовать операторы if-else внутри функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...