нацеливание заголовка в WordPress пост - PullRequest
1 голос
/ 10 августа 2010

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

Я начал с использования ловушки фильтра 'the_title' и вызова этогоfunction.

function add_button_to_title($title)
{
  global $post;
  if(is_single())
  {
    return $title.'googly googly';
  }
  return $title;
}

Проблема в том, что ссылки на боковой панели, по-видимому, также используют 'the_title', так как я увидел, что мой текст также отображается на боковых панелях, что привело меня к:

if(is_single() && in_the_loop())

Но тогда в моей теме (и я полагаю, темы в целом) есть ссылка на предыдущий пост и следующий пост, который также использует фильтр «заголовок».Итак, наконец, у меня есть:

if(is_single() && in_the_loop() && ($post->post_title == $title))

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

Любая помощь приветствуется!

Ответы [ 4 ]

2 голосов
/ 10 августа 2010

Ин

На самом деле нет хорошего решения, за исключением, как сказал ShaderOp, требующего изменения темы. Ваше решение будет работать по большей части. Единственное исключение - если разработчик темы изменил запрос на странице. Я бы сказал, что это, вероятно, достаточно хорошее решение, которое охватит более 95% случаев, с которыми вы столкнулись.

2 голосов
/ 05 декабря 2011

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

function add_button_to_title( $title ) {
  global $post;
  if( is_single() && $title == $post->post_title ) {
    return $title . 'googly googly';
  } else {
    return $title;
  }
}
0 голосов
/ 14 февраля 2012

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

Кроме того, я добавил логический флаг, который устанавливается в значение true с использованием фильтра 'the_content'.Таким образом, заголовок будет изменен, пока не будет отображено содержимое.Таким образом, я гарантирую, что боковые панели / виджеты не будут затронуты (например, тематическая тема имеет виджет по умолчанию со ссылками на страницы - здесь другие условия не будут полезны, так как get_the_id () будет возвращать эквивалент).Это ТОЛЬКО работает, если тема использует боковые панели справа.Я еще не нашел способ подключиться непосредственно перед вызовом the_title для страницы / поста, чтобы включить логический флаг.

function myplugin_adjust_title($title, $id) {
    global $myplugin_title_changed;

    if ($myplugin_title_changed) {
        return $title;
    }

    if (in_the_loop() && is_page('myplugin') && $id == get_the_ID()) {
        $title = '';
    }
    return $title;
}
add_filter('the_title', 'myplugin_adjust_title', 10, 2);

function myplugin_adjust_title_helper_content($content) {
    global $myplugin_title_changed;
    $myplugin_title_changed = true;
    return $content;
}
add_filter('the_content', 'myplugin_adjust_title_helper_content');
0 голосов
/ 10 августа 2010

Не проще ли сохранить исходную версию функции add_button_to_title, но вместо того, чтобы подключать ее к фильтру, вызывайте ее прямо со страницы single.php в соответствующем месте?

Например, где-то в вашей теме single.php вместо этого:

<h3 class="storytitle">
    <a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a>
</h3>

Используйте это:

<h3 class="storytitle">
    <a href="<?php the_permalink() ?>" rel="bookmark">
        <?php echo add_button_to_title(the_title('', '', false); ?>
    </a>
</h3>
...