add_filter для конкретных страниц
Можно ли добавить этот фильтр
add_filter("the_content", "magicalender_get_event_page");
Но только для одной конкретной страницы, например
if($post->post_name == "magicalenderpage")
Если я помещу условие if внутрь функции, то на всех других страницах контент не отображается - а с добавлением else, который выводит контент страницы в других случаях, возникают проблемы, когда это мешает работе других плагинов, которые также используют
add_filter("the_content", "foo");
Функция magicalender_get_event_page выглядит следующим образом
function magicalender_get_event_page(){
global $wpdb;
global $post;
if($post->post_name == "magicalenderpage"){
echo "<div class=\"magi_calender\">";
for($i = 0; $event = $wpdb->get_row("SELECT * FROM ".$wpdb->prefix."magicalender", ARRAY_A, $i); $i++){
echo"
<div class=\"event\">
<h1>".$event['event']."</h1>
<h2>".date('m/d/Y', strtotime($event['dmy']))."</h2>
<div>".str_replace("&", "&", str_replace("'", "'", str_replace(""", "\"", $event['desc'])))."</div>
</div>
";
}
echo "</div>";
$o = $wpdb->get_row("SELECT * FROM ".$wpdb->prefix."magioptions", ARRAY_A);
echo"
<script type=\"text/javascript\">
var priority = '".$o['dm']."';
var customDays = new Array('".$o['monday']."', '".$o['tuesday']."', '".$o['wednesday']."', '".$o['thursday']."', '".$o['friday']."', '".$o['saturday']."', '".$o['sunday']."');
var customMonths = new Array('".$o['january']."', '".$o['february']."', '".$o['march']."', '".$o['april']."', '".$o['may']."', '".$o['june']."', '".$o['july']."', '".$o['august']."', '".$o['september']."', '".$o['october']."', '".$o['november']."', '".$o['december']."');
var customMonthsShort = new Array('".$o['jan']."', '".$o['feb']."', '".$o['mar']."', '".$o['apr']."', '".$o['ma']."', '".$o['jun']."', '".$o['jul']."', '".$o['aug']."', '".$o['sep']."', '".$o['oct']."', '".$o['nov']."', '".$o['dec']."');
jQuery(\".magi_calender\").magiCalender(priority, customDays, customMonths, customMonthsShort);
</script>
";
}
else{
return $content;
}
}

Полезно публиковать весь код фильтра и функции обратного вызова, а не только его части.
Однако, я подозреваю, что проблема в том, что вы не возвращаете $the_content
за пределами вашего условия, например:
function magicalendar_get_event_page( $content ) {
if ( $post->post_name == 'magicalendarpage' ) {
// Делаем что-то с $content
return $content;
}
}
add_filter( 'the_content', 'magicalendar_get_event_page' );
Если это так, переместите возврат за пределы условия:
function magicalendar_get_event_page( $content ) {
if ( $post->post_name == 'magicalendarpage' ) {
// Делаем что-то с $content
}
return $content;
}
add_filter( 'the_content', 'magicalendar_get_event_page' );
Чтобы понять, почему/как это мешает другим фильтрам на 'the_content'
, нам, вероятно, нужно увидеть ваш код.
РЕДАКТИРОВАНИЕ
Как минимум две проблемы:
- Вы не передаете
$content
в качестве аргумента вашей функции обратного вызова фильтра - НЕ ВЫВОДИТЕ РЕЗУЛЬТАТ ФИЛЬТРА ЧЕРЕЗ ECHO! Возвращайте его. Это очень вероятно вызывает вашу проблему с другими фильтрами, примененными к
the_content
.
Если вам нужно фильтровать the_content
конкретно до или после других фильтров, то добавьте приоритет в ваш вызов add_filter()
. 10 — значение по умолчанию. Используйте меньшее число для фильтрации раньше; используйте большее число для фильтрации позже.

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

@Stephen Cook - в вашем коде точно нет $content
в качестве аргумента функции - смотрите в ответе @Chip Bennett function magicalendar_get_event_page( $content ) {
- также, почему бы вам не рассмотреть возможность создания шаблона страницы для этой страницы?

Шаблон страницы, вполне возможно, является правильным решением в данном случае. P.S. см. отредактированный ответ.

У меня действительно был параметр $content в моём плагине, не знаю как я нашел копию для вставки здесь без него. Но спасибо, я попробую использовать "return" вместо "echo" и также шаблон страницы

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