2011-01-27 3 views
4

Я построил очень уникальную тему javascript для Wordpress, и теперь короткие коды не работают. У меня нет плагинов, поэтому это не так. Что я потерял из своих файлов шаблонов Wordpress, которые необходимы для использования коротких кодов (например: [галерея]).Wordpress shortcode не работает

Я понимаю, как сделать короткие коды, но как WP занимает ваше сообщение и заменяет «[галерея]», когда он выплевывает его обратно для отображения?

EDIT: вот что я в настоящее время работает с:

$pagepull = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type = 'page' AND post_status = 'publish' ORDER BY menu_order", ARRAY_A); 
    $i = 1; 
    foreach ($pagepull as $single_page){ 
    echo "<div class=\"section\"><ul><li class=\"sub\" id=\"" . $i . "\"><div class=\"insection\">"; 
     echo $single_page['post_content']; 
$i++; 
// more code that is irrelevant... 
// more code that is irrelevant... 
// more code that is irrelevant... 
    } 
+0

Посмотрите на мой ответ ниже! – keatch

+1

Короткий ответ: вы используете исходный контент ($ single_page ['post_content']) вместо фильтрованного: применяйте фильтр the_content. echo apply_filters ('the_content', $ single_page ['post_content']); – keatch

ответ

11

Ok, попробуйте это

$pagepull = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type = 'page' AND post_status = 'publish' ORDER BY menu_order", ARRAY_A); 
    $i = 1; 
    foreach ($pagepull as $single_page){ 
    echo "<div class=\"section\"><ul><li class=\"sub\" id=\"" . $i . "\"><div class=\"insection\">"; 
     echo apply_filters('the_content',$single_page['post_content']); 
$i++; 

Wordpress принять ваше содержание и применять фильтры к нему. Вы должны зарегистрировать фильтр и проанализировать содержимое.

Если ваша тема не отображает ваши короткие коды, вероятно, вы выводите содержимое сообщения, не позволяя Wordpress фильтровать его.

Вызов функции get_the_content() для сообщения, не запускает фильтр для коротких кодов (если есть).

Чтобы применить

<?php apply_filters('the_content',get_the_content($more_link_text, $stripteaser, $more_file)) ?> 

Ref: http://codex.wordpress.org/Function_Reference/get_the_content

Примечание: многие плагины регистрировать фильтры с содержанием реализации шорткоды!

+0

Спасибо за комментарий! Есть ли шанс, что вы могли бы прокомментировать мое новое редактирование? – Dave

0

Мое решение было заменить

<?= get_the_content() ?> 

с

<?= the_content() ?> 

, который, как уже упоминалось keatch, применяет фильтры до возвращения содержимого.

Read this carefully about the_content

1

использовать это, если вы хотите, чтобы содержимое внутри переменной:

ob_start(); 
the_content(); 
$content = ob_get_clean(); 

теперь вы можете просто сделать эхо $ содержание; или использовать регулярное выражение или все, что вы хотите, чтобы содержимое выглядело так, как вы хотите.

0

Пожалуйста, используйте

ob_start(); 

в начальной функции и использовать

return ob_get_clean(); 

перед закрытием функции.

Надеюсь, это поможет вам в полной мере.

Cheers

1

У меня была та же проблема.

Короткие коды зависят от WP Loop, но это другая проблема.Короче говоря, я добавил the_post(); на странице, где должен быть указан короткий код (например, articles.php).

Кроме того, убедитесь, что вы используете the_content(), чтобы отобразить текст (например, $post->post_data не покажет вам короткие коды).

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