2010-08-10 2 views
1

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

Я начал с использования фильтра «the_title» и вызвал эту функцию.

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

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

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

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

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

+0

Может быть, это безопаснее, чтобы сравнить записи (передается в качестве второго аргумента в 'the_title' фильтров. Если другой фильтр перед вами изменяет название, я думаю, что прошло название может не совпадать с заголовком после базы данных, что сделало бы ваш тест более сложным. Сравнение идентификатора более безопасно тогда. –

+0

hi jan, это было бы отличным решением, если бы я мог узнать, какой крючок отвечает за вывод идентификаторов. Когда заголовок выводится, фильтр 'the_title() вызывается. Есть ли аналогичный для идентификаторов? – Ying

ответ

0

Не было бы проще сохранить исходную версию вашей функции 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> 
+0

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

+0

yeap, это то, что я изначально сделал для бутстрапа. Как отметил Джон, я хочу, чтобы он смог охватить широкую аудиторию, которая должна просто «подключить ее». Спасибо за вклад, хотя! – Ying

2

Ин,

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

2

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

function add_button_to_title($title) { 
    global $post; 
    if(is_single() && $title == $post->post_title) { 
    return $title . 'googly googly'; 
    } else { 
    return $title; 
    } 
} 
+0

Какой фильтр вы использовали? – Brad

0

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

Кроме того, я добавил флаг boolean, который установлен в 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

«Боковая панель справа» вводит в заблуждение. Вы имеете в виду, что он работает только в том случае, если боковая панель называется ПОСЛЕ содержания страницы/сообщения в коде (боковые панели справа могут быть фактически вызваны до содержимого страницы/сообщения). –

Смежные вопросы