Мишко

Не писать сто условий для is_category

Поскольку в вордпрессе нету фукнции (?), которая могла бы как перечислить все дочерние категории в констуркции if как это можно сделать со страницами

if ( is_page('28') || $post->post_parent == '28'

а перебрать их можно только как то так

$termID = 10;  
$termchildren = get_term_children( $termID, 'category' );

Через foreach, но foreach в констукцию if не засунешь, у меня назревает вопрос: есть ли альтернатива подобному коду?

if (is_category('1') or is_category('2') or is_category('3') or is_category('4') or is_category('5') or is_category('6') or is_category('7') or is_category('8'))  и т.д.

При условии что они являются потомками одной категории?

Больше 4 циклов не выполнять?

Очередная загадка Query_posts

У меня в отдельных сингловых записях при определенных условиях после самого текста записи подтягиваются записи, разбитые по блоках. Делается это вот так:

<!--- ///////////////     НОВОСТИ       //////////////--->
<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();

$taxquery['sobytiya'] = $pteg;
$taxquery['post_type'] = "post";
$taxquery['posts_per_page'] = -1;
$wp_query->query( $taxquery ); ?>
<?php if (have_posts()) : ?>
<p class="contype">Новости</p><ul style="margin-bottom: 14px;">
<?php while ($wp_query->have_posts()): $wp_query->the_post(); ?>

<li>[<?php the_time('d.m.Y') ?>] <a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>

<?php endwhile; ?>
</ul>
<?php endif; ?>
<?php $wp_query = null; $wp_query = $temp; ?>



<!--- ///////////////      Позиции CAN-сети      //////////////--->
<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();

$taxquery['sobytiya'] = $pteg;
$taxquery['npopositions'] = "canpos";
$taxquery['post_type'] = "positions";
$taxquery['posts_per_page'] = -1;
$wp_query->query( $taxquery ); ?>
<?php if (have_posts()) : ?>
<p class="contype">Позиции CAN-сети</p><ul style="margin-bottom: 14px;">
<?php while ($wp_query->have_posts()): $wp_query->the_post(); ?>

<li>[<?php the_time('d.m.Y') ?>] <a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>

<?php endwhile; ?>
</ul>
<?php endif; ?>
<?php $wp_query = null; $wp_query = $temp; ?>


<!--- ///////////////      Позиции НПО ВЕКЦА      //////////////--->
<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();

$taxquery['sobytiya'] = $pteg;
$taxquery['npopositions'] = "vektsapos";
$taxquery['post_type'] = "positions";
$taxquery['posts_per_page'] = -1;
$wp_query->query( $taxquery ); ?>
<?php if (have_posts()) : ?>
<p class="contype">Позиции НПО ВЕКЦА</p><ul style="margin-bottom: 14px;">
<?php while ($wp_query->have_posts()): $wp_query->the_post(); ?>

<li>[<?php the_time('d.m.Y') ?>] <a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>

<?php endwhile; ?>
</ul>
<?php endif; ?>
<?php $wp_query = null; $wp_query = $temp; ?>

Все три блока, отлично выводят записи (если есть), но вот когда добавляю вывод для четвертого блока (даже если с точно такими самими условиями что уже есть) – по цимбалах. Переношу блок по коду выше на пару блоков – работает! Опускаю ниже третьего блока – ноль реакции. И ведь ошибки вроде никакой нет, ведь по сути все запросы написаны по одной схеме, и следовательно, коль выводятся и после первого и после второго, то почему после третьего ничего не происходит?

Выборка нескольких таксономий MySQL

Каюсь, все через недостаток знаний MySQL-запросов, но может все-таки кто-то может подсказать, как используя подобный код

SELECT * 
FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
WHERE $wpdb->posts.post_type = 'post' 
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->terms.slug = 'programming'
ORDER BY $wpdb->posts.post_date DESC

можно сделать выборку по двум таксономиям (двум термам разных таксономий), Например выбрать все записи рубрики Программирование, которые обозначены термом PHP таксономии ЯЗЫКИ. Проблема в том, что я просто не знаю как коректно присобачить новые условия. Просто добавив после

AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->terms.slug = 'programming'

такую часть

AND $wpdb->term_taxonomy.taxonomy = 'languages'
AND $wpdb->terms.slug = 'php'

?

Странности query_posts

Почемуто вот такой код

query_posts( array( 'post_type' => 'sobytie', 'post_status' => array( 'publish', 'future' ), 'posts_per_page' => '-1'

не вопринимает условие по статусах постов, и выводит все скопом, даже черновик, которого на самом деле нету… Глюк?

Поламал иерархию шаблонов

Сам не заметил, когда это произошло, но вдруг перестали подхватываться шаблоны taxony.php и синглы для типов постов. Отдает 404.
Думал хостер что-то намутил, перенес сайт на локалхост – та же фигня. Т.е. хостер и глючные плагины отпадают.
Насколько я понимаю, влиять на подхват шаблонов может тогда только файл функций, но там все как было, так и осталось…
Обескуражен… 🙁

Фиды бывают разные…

Почему то у меня в одном из блогов (3.0.4, пермалинки по типу ?p=915) не работает фид типа example.com/feed зато
есть такие

<link rel="alternate" type="application/atom+xml" title="Atom" href="http://example.com/?feed=atom" />
    <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="http://example.com/?feed=rss2" />
    <link rel="alternate" type="text/xml" title="RSS .92" href="http://aexample.com/?feed=rss" />

Соответсвенно, не могу соорудить фид типа для ленты кастомного типа постов.
Пробовал делать так http://aexample.com/?feed=rss&post_type=books но не заводится…

Как можно мне помочь? 🙂

Get Get Get

Делаю разные выборки по комбинациям типа поста + тег. Параметры передаются через GET в готовый код запроса, в который подставлюятся параметры запрашиваемой выборки. Вообщем, для всех возможных вариантов у меня используэться два шаблона. Для вывода заглавий выводимой информации написал в functions.php такое

function t_name()
{  
    if (  $_GET["teq"] == 'adaptation') { echo "Адаптация" ;}
elseif (  $_GET["teq"] == 'nauka') { echo "Наука и образование" ;}
elseif (  $_GET["teq"] == 'peregovory-oon') { echo "Международные переговоры ООН" ;}
  else { "Что-то не так...";}
}

И в одном из шаблонов эта штука работает отлично (запрос передается на другую страницу и возращается на страницу с которой сделан запрос через аякс), а в другом (запрос с вывода, сформированного через аякс, передается на другой шаблон, который открывается как новая страница) – нет… Хотя в сам запрос подставляет нужные данные. Почему функция работает не во всех шаблонах?

Почти прикол

У меня на одном сайте админбар вечно "падал" на хедер админки. А вот сегодня заметил что если в options.php поменять WP_LANG с ru на en то все становиться хорошо – ничего не падает. В принципе, меня тот падающий админбар сам пос ебе не сильно волнует (дописать в css margin в 20 пикселей не сложно) но случай сам по себе, мне кажется, интересный – каим образом файл перевода может влиять на внешний вид админки?

Белая страница, но не в коментах

Есть у меня MU последней версии, и вот только на одном сайте, и только в разделе Редактирование страниц вижу белую страницу в админке. Все остальное ок. Кто-нибудь сталкивался? Чем такое может быть вызвано?

Разбика постов по годам

Можно ли как-то поиздеваться над циклом, чтобы он выглядел так

2011 год

-название поста
-название поста
-название поста

2010 год

-название поста
-название поста
-название поста
-название поста
-название поста
-название поста

и т.д.

Т.е. чтобы в момент, когда начинаюся посты какого-либо года, он высвечиваля в цикле….

Кастомные посты и таксономии – вывод

Значит сайт с кастомными типами постов и таксономиями разными.

По запросу http://site.ru/taxonomy/term и http://site.ru/post-type/postname работает все, а вот http://site.ru/taxonomy и http://site.ru/post-type/ выдают 404 страницу. Я уже и структуру пермалинков обновлял, и все такое – не помогает!

И еще есть темка. Slug некоторых терминов подхватываются как часть адреса поста, slug которого частично похож на slug термина, соответственно открывается не страница с записями термина, а пост, в адресе которого есть те же буквы ))) Сделал такой хак – ‘rewrite’ => array(‘slug’ => ‘tax/termname’ и для терминов сработало, но для списка всех постов таксономии опять-таки, возвращает пост…

Как быть? Чем лечить?

Запутался в новых возможностях Wp :)

Создал пост тайп, скажем, Книги. Создал к этому типу записей таксонию по жанрам. И смотрю на картинку с иерархией шаблонов и не могу понять, как теперь добиться, чтобы выводить одним шаблоном
а) все записи это пост тайпа
б) все записи по каждому из term’ов таксономии Жанр
в) сингл-пост, который является Книгоой и/или отнесенный к одному из term’ов таксоними Жанр
Т.е. задача – не плодить кучу шаблонов (лдя пост тайпа, для таксономии, лдя сингл-поста, помеченного таксономией и/или являющемся постом определенного типа), чтобы не подцеплялись другие наявный шаблоны типа index.php

Cпасибо!

Функции ВП и аякс

Сделал небольшой аякс наворот. Типа выпдающее меню с рубриками. После выбора рубрики без перезагрузки страницы открываются последние новсти из данной рубрики. Сам аякс-код выглядит так

<script type="text/javascript">
function showNews(str)
{
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  } 
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","<?php bloginfo('stylesheet_directory'); ?>/getnews.php?q="+str,true);
xmlhttp.send();
}
</script>

А в файле темы getnews.php лежит простой цикл, в который подставляетя преданный через GET номер рубрики.

Все хорошо, только почему при такои использовании функции типа get_post и вообще все функции цикла якобы не существуют!

Насколько я понял, при использовании аякса надо делать какие-то хуки-хаки, но я не понимаю принципа их работы и сам разобраться не смог, Может кто-тоо шарит? 🙂

Интересные способы постинга

Тут http://en.support.wordpress.com/post-by-email/ говорят что можно как-то активировать настройки для постинга через е-майл. но что-то я в ВП 3.3 в упор не вижу этого, ни в настройках блогов, ни в настройках создания записей….

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

cforms как основа движка для петиций

Задумал использовать сиформс для петиций. Ведь по сути петиция – письмо, коотрое подписывает человек. Т.е. просто есть форма ввода имени, е-мейла и шаблон письма. Шаблон письма в сформс можно вставить как дескрипшн поля при создании/редактировании поля по типу
название поля|Дефолтный текст поля

и все отлично, но одна проблема – абзацы таким образом в дефолтном тексте поля не сохраняются, а теги показываются как есть. Как можно побороть/хакнуть? Неужно в сиформс продумали все, а абзацы в дескрипшине поля проставить нельзя?

Определяем рубрику поста за циклом

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

<?php if (in_category('6')) {$locked = "ug1";} ?>
<?php if (in_category('7')) {$locked = "ug2";} ?>

И уже исходя из значения данной переменной формирую меню. Но как быть если сайдбар идет перед циклом? Как передать значение переменной "наверх"? Использовать второй раз цикл в сайдбаре типа

<?php 
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php if (in_category('6')) {$locked = "ug1";} ?>
<?php if (in_category('7')) {$locked = "ug2";} ?>
<?php endwhile; else: ?><?php endif; ?>

наверное не сильно ускорит работу блога.

Может есть способ определить, включен ли сингл пост (открытый в данный момент) в ту или инную рубрику без прибегания к циклу? Ведь как то ж работают тайтлы и остальные атрибуты!?

is_page и

Как сделать условие типа is_page если страница разбита не нескольо частей тегом <!–nextpage–>, а нам надо задать условие для каждой из частей страницы?

Пользовательский выбор темы

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

Вот нашел такую функцию

http://codex.wordpress.org/Function_Reference/switch_theme

Но как на основе этого можно, скажем, создать ссылку на вид сайта в определенной "одежке"?

Зачистка шорткодов

У меня на одном из сайтов при кастомном выводе постов выводит

[CAPTION ID="ATTACHMENT_82" ALIGN="ALIGNLEFT" CAPTION="Тест"][/CAPTION]

в тексте анонса.

Я пытался зачистить спомощью функции replace, какие варианты только не перепробовал и максимум чего добился – это что зачищается половинка данного кода, но фраза

[CAPTION ID="ATTACHMENT_82" ALIGN="ALIGNLEFT"

все равно остается (использовал

preg_replace('/CAPTION(.*)\/CAPTION\]/Uis','',$trunc_content);

)

Есть тут кто-то более опытный в плане использования регулярных выражений? 🙂

Контент в зависимости от даты

У меня на главной странице есть блок (который имеет свое оформление) с анонсами. Естественно, когда они уже являются неактуальными, они продолжают висеть, если новые анонсы не постяться…

Хотелось бы сделать через кастом-филдз такую возможность задавать дату, до которой анонсы актуальны.

Я написал что-то типа

// БЛОК АНОНСІВ
        $cat_block = 28; // номер рубрики
    $block_count = 2; // кол-во записей в блоке
        $i = 0;
    query_posts('cat=' . $cat_block . '&posts_per_page=' . $block_count);
        $anonsexpiry = get_post_meta($post->ID, 'aexp', $single = true); ?>  
<?php if($anonsexpiry !== '') {  

} else {
echo $block_do;
   echo '<div class="block"><h1><a href="http://www.necu.org.ua/category/anonsy/">Анонси</a></h1></div><hr>';
    
    if (have_posts()) : 
        while (have_posts()) : 
            the_post();
            require('main-home-loop.php');
        endwhile; 
    endif;
    
echo $block_posle;
}

Теперь осталось две задачи
1. понять как лучше задавать через касотм филдз дату и как ее сравнивать с датой текущего дня
2. сделать как-то так чтобы из выводящихся двух постов публиковались только актуальные (т.е. чтобы каждый из постов проверялся на актуальность…)

Буду признателен за идеи и варианты воплоения (можно спримерами кода 🙂 )

Anonymous
Отправить
Ответ на: