Спрашиваем и отвечаем по Wordpress-6

SeVlad
На сайте с 03.11.2008
Offline
1609
60441

Продолжаем задавать и получать ответы на вопросы по одной из самой популярной ныне CMS - Wordpress.

Часть 1, часть 2, часть 3, часть 4, часть 5.

Всем, кто только начинает работать с ВП рекомендую ознакомиться со статьей Новичкам — С чего начать . Здесь вы получите ответы на вопросы типа что нужно перед установкой WordPress, как установить WordPress и что делать дальше.

А вообще в этой статье имеется масса ссылок, которые будут полезны не только новичкам. Рекомендую всем.

Кроме того, вполне возможно, что на вопрос, который вы хотите задать - вы найдете ответ быстрее, чем напишете в топик ;)

Несколько замечаний перед созданием поста в топике

  • Прежде, чем задать вопрос типа
    как из ссылок вида "/?p=123" сделать "/nazvanie-posta/"
    загляните в админку ВП и хотя бы посмотрите на все пункты. Уверяю вас - пока вы не нажмёте "сохранить" - ничего не измениться. Исключение: изменение положения и состава виджетов в сайдбаре.
  • Это топик по Wordpress. По СЕО, HTML, CSS, JS, общих вопросов безопасности и тп пожалуйста, спрашивайте в соответствующих темах и разделах сёрча.
  • Формат топика: задал вопрос-получил ответ (опц. -нажал "спасибо" ;) ). Если Ваш вопрос предполагает более-менее продолжительное обсуждение - имеет смысл создать отдельный топик. Так обсуждение будет больше на виду, не потеряется в череде других вопросов и вы не помешаете другим участникам найти ответы на свои вопросы.
  • Не нужно "спасибных" постов (где только "спасибо", без вопросов и\или описаний решений и тп) - для этого есть кнопка. Плз, не захламляете топик пустышками.

Необходимый минимум, который должен знать и уметь админ ВП (и вообще сайтостроитель):

* Термины - рубрики, записи (посты), страницы, сайбар, виджеты, метки\теги, бекап и тд. Не просто знать названия, а понимать их сущность и назначение.

* HTML - базовый уровень (изучить десяток тегов типа <p> или <img> - не велика проблема).

* Посмотреть исходный код страницы в браузере.

* Пользоваться поисковыми системами.

А так же настоятельно рекомендую забыть про виндовый блокнот и править файлы в правильных блокнотах: AkelPad , Notepad++ и тп. В кодировке UTF-8 без BOM.

Если же вы хотите действительно разобраться с движком (вообще любым, не только ВП) и\или иметь хорошие и посещаемый сайты - вам не обойтись без знаний PHP, знаний безопасности (как сетевой, так и др. даже офлайновой), базовых знаний протоколов передачи, базовых знаний работы серверов и ещё много чего.. На что нужно потратить много времени. (Это не запугивание, нет - это совет-предупреждение)

И напоследок полезные ресурсы по ВП:

Кодекс - основной документ по устройству и работе ВП.

Ру-форумы: Оф. ру-форум, другой русский форум, форум Макса.

Блоги: Юрия Белотицкого (гуру ВП), WP Magazine (онлайн журнал, от некоторых участников разработки ВП), WordPress как на ладони" (ex. "Альтернативный взгляд на WordPress) имеет неофициальную русскоязычную документацию (вольный перевод кодекса) по ВП.

Англоязычные Вопросы и Ответы:

http://stackoverflow.com/

http://wordpress.stackexchange.com/

Дополнения к ВП:

Темы и плагины. Новичкам настоятельно рекомендую брать только тут. Почему и чем грозят помойки см п1 и тут.

Ну а тем, кто хочет узнать какие сайты можно делать на ВП смотрите старый (2009г), но в большинстве своём актуальный топик Интересные сайты на ВП (скептики же, могут сразу обратить внимание на часть: "Высоконагруженные и посещаемые сайты на WordPress") и того же года пост 10 вещей которые можно сделать на WordPress помимо блоггинга (много трафа!)

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
reznikds
На сайте с 05.03.2011
Offline
52
#1

В первый пост стоило бы добавить

http://stackoverflow.com/

http://wordpress.stackexchange.com/

Часто ответы на свои вопросы нахожу именно там.

J
На сайте с 21.08.2011
Offline
78
#2

Начнём "засерать" новую тему. :)

Итак, есть в Кодексе WP такой пример для update_post_meta:

<?php if ( ! update_post_meta (7, 'fruit', 'banana' ) ) add_post_meta( 7, 'fruit', 'banana' ); ?>

Копи-пастю его в свою функцию, хукающуюся на save_post, изменив только нужный мне ID.

Итог: вместо того, чтобы обновить поле, если оно существует, этот код тупо добавляет дубликаты в БД.

Что за ерунда, друзья? Я что-то упустил из виду? Можете проверить у себя?

п.с.: WP 3.6.

SeVlad
На сайте с 03.11.2008
Offline
1609
#3
Jovian:
вместо того, чтобы обновить поле, если оно существует, этот код тупо добавляет дубликаты в БД.

Мб потому что это add а не update ? ;)

А в add есть $unique:

Если поставить параметр в true, то при добавлении поля, сначала будет проверяться существует ли уже поле с таким же ключом, если существует, то поле не будет добавлено.
По умолчанию: false
J
На сайте с 21.08.2011
Offline
78
#4

SeVlad, нет. ;)

update_post_meta возвращает true, если есть такие key + value. В том-то и дело. Цитата с сайта WP:

Adding or Updating a Unique Custom Field
Adds a new custom field if the key does not already exist, or updates the value of the custom field with that key otherwise.

<?php add_post_meta( 7, 'fruit', 'banana', true ) || update_post_meta( 7, 'fruit', 'banana' ); ?>
The following will have the same effect:

<?php if ( ! update_post_meta (7, 'fruit', 'banana' ) ) add_post_meta( 7, 'fruit', 'banana' ); ?>

У меня же оно упорно пишет НОВЫЙ такой же key + value в БД. Фигня какая-то. :)

SeVlad
На сайте с 03.11.2008
Offline
1609
#5
Jovian:
SeVlad, нет.

То ли я тебя не понимаю, то ли одно из двух:)

В примере из кодекса обновляет update_post_meta, а не add_post_meta.

А add, ессно, добавляет. Вот если будет добавлен $unique, тогда наверное обновит. Но тут до конца я не понял, а экспериментировать пока не хотса ;)

http://wp-kama.ru/function/add_post_meta:

add_post_meta() удобнее использовать, когда используются несколько произвольных полей с одинаковыми ключами. Для этого у функции есть параметр $unique (уникальный), который по умолчанию равен false, т.е. по умолчанию создается не уникальный ключ, что означает что таких ключей может быть несколько.

Юзай update_post_meta:

Обновляет произвольное поле, указанного поста или добавляет его.

Функция может быть использована вместо add_post_meta(), т.к. сначала проверяется существование произвольного поля у указанного поста, если поле не найдено, то управление автоматически передается функции add_post_meta($post_id, $meta_key, $meta_value) и результат уже будет возвращен add_post_meta().
J
На сайте с 21.08.2011
Offline
78
#6

SeVlad, ну смотри, update_post_met должна вернуть true, если найдёт ключ + значение равное 'fruit' и 'banana' соответственно. Это проверяется выражением:

if ( update_post_meta (7, 'fruit', 'banana' ) )

Верно?

Теперь обратный if с добавлением восклицательного знака -- будет работать от обратного, если false:

if ( ! update_post_meta (7, 'fruit', 'banana' ) )

Верно? :)

И добавляем add_post_meta, если update_post_meta в нашем if получился false:

if ( ! update_post_meta (7, 'fruit', 'banana' ) ) add_post_meta( 7, 'fruit', 'banana' );

Вроде, правильно, ан не работает! :) У меня оно продолжает добавлять дубликаты ключа+значения. :)

---------- Добавлено 25.09.2013 в 12:47 ----------

SeVlad:
В примере из кодекса обновляет update_post_meta, а не add_post_meta.

Нет, не обновляет, а с помощью вызова update_post_meta оно проверяет, если такая пара key+value уже, и, если нет, должно добавить с помощью add_post_meta. ;)

То есть, фактически получается, что не работает пример полностью скопипастенный с Кодекса ВП. 🍿

---------- Добавлено 25.09.2013 в 13:01 ----------

Черт возьми! Вот, собственно, и ответ, почему оно так происходит:

update_post_meta

Return Values
(mixed)
Returns meta_id if the meta doesn't exist, otherwise returns true on success and false on failure. NOTE: If the meta_value passed to this function is the same as the value that is already in the database, this function returns false.

Спрашивается, почему эти крендели не указали это примечание в примере на странице с add_post_meta:

Adding or Updating a Unique Custom Field
Adds a new custom field if the key does not already exist, or updates the value of the custom field with that key otherwise.

<?php add_post_meta( 7, 'fruit', 'banana', true ) || update_post_meta( 7, 'fruit', 'banana' ); ?>
The following will have the same effect:

<?php if ( ! update_post_meta (7, 'fruit', 'banana' ) ) add_post_meta( 7, 'fruit', 'banana' ); ?>
SeVlad
На сайте с 03.11.2008
Offline
1609
#7
Jovian:
и, если нет, должно добавить с помощью add_post_meta.

а если "да"? ;) (я же говорил про обновление. Что тебе вроде бы и надо было решить)

Jovian:
Вот, собственно, и ответ, почему оно так происходит:

Jovian, я ж вроде тоже самое показывал у Тимура. Просто я ж с аглицким не дружу, а у него по-русски. Конечно, бывают ошибки, но... Но зато иногда шире и понятней чем в кодексе. Хотя с кодексом сверяться надо.

ЗЫ. мб потом поставлю эксперименты с указанными функциями

J
На сайте с 21.08.2011
Offline
78
#8
SeVlad:
а если "да"? (я же говорил про обновление. Что тебе вроде бы и надо было решить)

Не, я просто пытался разобраться, почему пример с сайта ВП не пашет нормально. ;)

Оказалось, что update_post_meta возвращает false не только, когда ключа нет, но и тогда, когда ключ и значение полностью совпадают с записываемыми -- вот здесь и оказалась загвоздка. ;) Просто это было не указано на странице описания примера.

SeVlad:
Jovian, я ж вроде тоже самое показывал у Тимура. Просто я ж с аглицким не дружу, а у него по-русски. Конечно, бывают ошибки, но...

А я неплохо знаю инглиш, и стараюсь юзать только первоисточники, коим, в данном случае, является wordpress.org. ;)

Тимур, безусловно, молодец, но я предпочитаю инглиш.

Усё, разобрались.

SEOKinG
На сайте с 03.09.2008
Offline
169
#9

начал кое-где обновлять версии движка.

что-то заражено, что-то нет.

наткнулся на интересные папки:

wp-includes\Text

wp-includes\Text\Diff\Engine\shell.php

раньше не придавал им значение...

качал все версии с сайта лекактуса

зы. проверил сейчас 3.6.1 версию, там тоже это есть...

кто что думает?

---->Лучший курс обмена WMR ==> WMZ (http://goo.gl/w1yOz4), WMR, WMZ ==> гривны (http://goo.gl/XmyIKN)
SeVlad
На сайте с 03.11.2008
Offline
1609
#10
SEOKinG:
кто что думает?

Что нужно сравнить с оригиналом :)

General API for generating and formatting diffs - the differences between two sequences of strings.

Для ревизий, короче. Если я правильно понимаю.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий