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

Gerga
На сайте с 02.08.2015
Offline
94
#51

Armano, пример:


/**
* Функция возвращает рандомные записи
* обработчик шорткода devise-random-posts
**/
function devise_rand_posts() {

$args = array(
'post_type' => 'post',
'orderby' => 'rand',
'posts_per_page' => 5,
);

$the_query = new WP_Query($args);

if ($the_query->have_posts()) {

$string = '<ul>';

while ($the_query->have_posts()) {
$the_query->the_post();

$string .= '
<li>
<a href="'. get_permalink() .'">
'. get_posterposta_thumbnail()
. get_the_title() .'
</a>
</li>';
}

$string .= '</ul>';

/* Восстанавливаем оригинальные Post Data */
wp_reset_postdata();

} else {
$string = 'записей не найдено';
}

return $string;
}

add_shortcode('devise-random-posts', 'devise_rand_posts');


/**
* Функция возвращает миниатюру записи на основе мета поля "posterposta"
*
* @return string html img
**/
function get_posterposta_thumbnail($post = null, $size = 'post-thumbnail', $attr = array()) {
if (!$post = get_post($post)) {
return;
}

if ($attach = get_post_meta($post->ID, 'posterposta', 1)) {
$attach = wp_get_attachment_image($attach, $size, false, $attr);
}

return $attach;
}

Код можете добавить в functions.php вашей темы или создайте плагин, чтобы шорткод не зависил от текущей темы.

TG
На сайте с 07.11.2016
Offline
124
#52

Господа, WP по умолчанию выводит каноничную ссылку (rel="canonical") через wp_head только для singular страниц. У меня для индексации открыты первые страницы (без пагинации) рубрик и меток. Нужно ли тогда там тоже выводить канониную в хэде?

Gerga
На сайте с 02.08.2015
Offline
94
#53
Toyvo Glumov:
Нужно ли тогда там тоже выводить канониную в хэде?

вам сюда /ru/forum/optimization-practices/common

---------- Добавлено 13.08.2019 в 17:54 ----------

Если скажут, что нужно, в этом топике можете спросить: "как это реализовать?"

TG
На сайте с 07.11.2016
Offline
124
#54

Как получить адрес текущей категории или тега (метки). Нужно чтобы примерно так:

if (is_tag() || is_category()){

echo 'УРЛ данной категории/тега';
}
Gerga
На сайте с 02.08.2015
Offline
94
#55

Toyvo Glumov, пример:


if (is_tag() || is_category()) {
echo $_SERVER['REQUEST_URI'];
}
TG
На сайте с 07.11.2016
Offline
124
#56

Спасибо, а эта команда получает конечный урл? Просто у меня 301 редиректы стоят сначала на https, потом на www.

Gerga
На сайте с 02.08.2015
Offline
94
#57

Toyvo Glumov, пожалуйста. Эта команда получает относительный url текущей страницы.

Чтобы получить правильный url, можете так сделать:


if (is_tag() || is_category()) {
$q = get_queried_object();

echo get_term_link($q->term_id, $q->taxonomy);
}
TG
На сайте с 07.11.2016
Offline
124
#58

Вот так в итоге получилось, вроде все как надо работает. Нормально?

add_action('wp_head','myrel_canonical', 4);

function myrel_canonical(){
if (!is_paged()) {

if (is_home()) {
echo '<link rel="canonical" href="https://www.мойсайт.ru" />';
}

if (is_tag() || is_category()) {
$q = get_queried_object();
echo '<link rel="canonical" href="' . get_term_link($q->term_id, $q->taxonomy) . '" />';
}
}
}
Gerga
На сайте с 02.08.2015
Offline
94
#59

Toyvo Glumov, да. Только вместо

Toyvo Glumov:
echo*'<link*rel="canonical"*href="https://www.мойсайт.ru"*/>';

можете так сделать:


echo '<link rel="canonical" href="' . get_home_url() . '" />';

И третье условие if поменять на elseif

---------- Добавлено 14.08.2019 в 11:30 ----------

Примерно так можно переделать:


function myrel_canonical(){
if (is_paged()) {
return;
}

if (is_home() || is_front_page()) {
$url = get_home_url();
} elseif (is_tag() || is_category()) {
$q = get_queried_object();
$url = get_term_link($q->term_id, $q->taxonomy);
}

if (isset($url)) {
echo '<link rel="canonical" href="' . $url . '" />';
}
}
Gigabajt
На сайте с 04.10.2010
Offline
122
#60
Toyvo Glumov:
Как получить адрес текущей категории или тега (метки).

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

Вы можете использовать этот кусок кода внутри любого шаблона на своем веб-сайте WordPress:

global $wp;

$current_url = home_url(add_query_arg(array(),$wp->request));
Лидогенерация в соц.сетях и контексте от 400 руб. за лид. Работаю с Telegram, Instagram, VK. Заказать услугу: https://impossible-studio.com

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