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

okwell
На сайте с 12.07.2012
Offline
81
#121

demon2005,

demon2005:
Или каким иным методом это можно сделать, кроме как составить карту вручную и каждый раз при добавлении нового материала её редактировать?

Приведу пример без использования плагинов.

1. Создаем новое поле на странице редактирования записи. Для этого добавим следующий код в файл functions.php, который находится в папке темы:


add_action('add_meta_boxes', 'custom_box');

function custom_box(){
add_meta_box('alt-title','Альтернативное название записи','display_my_box','post','normal');
}

function display_my_box ($post) {
$atitle = get_post_meta($post->ID, 'atitle_id', true);
wp_nonce_field('nonce_id', 'nonce_name');
?>
<div>
<label for="atitle_id">Альтернативное название записи:</label>
<input class="widefat" type="text" name="atitle_id" size="30" id="atitle_id" value="<?php echo $atitle; ?>" spellcheck="true" />
</div>
<?php
}
add_action('save_post', 'save_func');

function save_func($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (!isset($_POST['nonce_name']) || !wp_verify_nonce($_POST['nonce_name'], 'nonce_id')) return;
if (isset($_POST['atitle_id']) && $_POST['atitle_id'] != ''){
update_post_meta($post_id, 'atitle_id', esc_html($_POST['atitle_id']));
}
}

После этого на странице редактирования записи появится новое поле с названием "Альтернативное название записи". Сохраните в это поле альтернативное название

2. Создаем новый файл с названием page-sitemap.php и сохраняем в папку темы (в то же место, где functions.php).

3. Вставим следующий код в файл page-sitemap.php


<?php
/*
Template Name: Sitemap
*/
?>

<?php get_header(); ?>
<?php
$posts = get_posts( array(
'numberposts' => -1,
'orderby' => 'date',
'order' => 'DESC',
'post_type' => array('post')

) );
?>
<h1>Статьи</h1>
<ul>
<?php foreach ( $posts as $post ): setup_postdata($post);
$atitle = get_post_meta($post->ID, 'atitle_id', true);
?>
<li><a href="<?php the_permalink(); ?>"><?php if ( $atitle ) echo("$atitle"); else the_title(); ?></a></li>

<?php endforeach; wp_reset_postdata(); ?>
<?php get_footer(); ?>
</ul>

Этот код генерирует список ссылок с альтернативными заголовками всех записей. При отсутствии альтернативного заголовка выводится настоящий заголовок записи.

4. Создаем новую страницу "Карта сайта" (Админ-панель -> Страницы -> Добавить новую). В блоке "Атрибуты страницы" выберем шаблон "sitemap"

Страница может отображаться криво из-за отсутствия некоторых html блоков, которых вы можете найти в файле index.php

S3
На сайте с 29.03.2012
Offline
368
#122

okwell, Примитивненько но сгодиться. Надо еще и страницы добавить, чтоб полная карта вышла.

Nomiki
На сайте с 28.03.2012
Offline
117
#123
Sly32:
Примитивненько но сгодиться. Надо

Норм. Ты строг сегодня ;)

Заказать дизайн сайта: nomiki@yandex.ru | Портфолио: behance.net/nomiki | ВК: vk.com/nmk_msk
okwell
На сайте с 12.07.2012
Offline
81
#124

тег ul нужно было закрыть сразу после цикла, видимо поспешил. Правильно будет так:


<h1>Статьи</h1>
<ul>
<?php foreach ( $posts as $post ): setup_postdata($post);
$atitle = get_post_meta($post->ID, 'atitle_id', true);
?>
<li><a href="<?php the_permalink(); ?>"><?php if ( $atitle ) echo("$atitle"); else the_title(); ?></a></li>

<?php endforeach; wp_reset_postdata(); ?>
</ul>
<?php get_footer(); ?>
Sly32:
Надо еще и страницы добавить, чтоб полная карта вышла.

Да, еще можно добавить рубрики, метки и другие таксономии, при их наличии:


<?php get_header(); ?>
<?php
$posts = get_posts( array(
'numberposts' => -1,
'orderby' => 'date',
'order' => 'DESC',
'post_type' => array('post')

) );
$tags = get_terms( 'post_tag' );
$categories = get_terms( 'category' );
$current_id = $post->ID;
?>
<h2>Статьи</h2>
<ul>
<?php foreach ( $posts as $post ): setup_postdata($post);
$atitle = get_post_meta($post->ID, 'atitle_id', true);
?>
<li><a href="<?php the_permalink(); ?>"><?php if ( $atitle ) echo("$atitle"); else the_title(); ?></a></li>
<?php endforeach; wp_reset_postdata(); ?>
</ul>

<h2>Страницы</h2>
<ul>
<?php wp_list_pages("exclude=$current_id&title_li="); ?>
</ul>

<h2>Рубрики</h2>
<ul>
<?php foreach ( $categories as $category ): $link = get_term_link( $category->term_id, 'category' ); ?>
<li><a href="<?php echo("$link"); ?>"><?php echo($category->name); ?></a></li>
<?php endforeach; ?>
</ul>

<h2>Метки</h2>
<ul>
<?php foreach ( $tags as $tag ): $link = get_term_link( $tag->term_id, 'post_tag' ); ?>
<li><a href="<?php echo("$link"); ?>"><?php echo($tag->name); ?></a></li>
<?php endforeach; ?>
</ul>

<?php get_footer(); ?>

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

GK
На сайте с 05.07.2009
Offline
61
#125

Вечер добрый, господа.

Так и не нашел решения со своим вопросом - вывод информации из дополнительного поля в метках (tag.php)

Сделал дополнительные поля для категорий и меток - расширенное описание, через плагин ACF.

В категориях реализовал вывод следующим кодом

<?php $term_id = get_query_var('cat');

echo the_field('dop_opisanie', 'category_'.$term_id); ?>

Подскажите код для меток - мозгов не хватает самому написать.

S3
На сайте с 29.03.2012
Offline
368
#126

okwell, Вы и так дали пример хорошего кода,пусть бы вопрошающий попытался разобраться и сам дописл недостающее.

ну и делать карту сайта для рубрик, меток,имхо, не нужно и не совсем правильно с точки зрения SEO.

AdelinaHost
На сайте с 21.11.2012
Offline
169
#127

Может кто поможет, в гугле ничего не нарыл.

Есть два разных домена, у обоих доменов WP парсит один и тот же контент и создает одни и те же permalinks, т.е.

domain1.com/nazvanie-posta-nomer-1

и

domain2.com/nazvanie-posta-nomer-1

Нужно:

Внутри поста domain1.com поставить линк на эту же статью у domain2.com

Т.е. чтоб с domain1.com/nazvanie-posta-nomer-1 был линк на domain2.com/nazvanie-posta-nomer-1

Вопрос как это организовать. Благодарю заранее

ADELINAhost - На рынке с 2012 года! - Шаред Хостинг, VPS, Выделенные Сервера, VPN . (https://lyrics.az)
Локации: Россия, США, Англия, Германия, Франция, Нидерланды, Украина, Сингапур, Австралия, Япония, Австрия (https://www.adelinahost.com/ru)
SeVlad
На сайте с 03.11.2008
Offline
1609
#128

demon2005, Sly32, okwell, Nomiki, дабы не флудить тут приглашаю: /ru/forum/947337 ;) (Другие тоже - велком)

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
Nomiki
На сайте с 28.03.2012
Offline
117
#129
AdelinaHost:
Нужно:
Внутри поста domain1.com поставить линк на эту же статью у domain2.com
Т.е. чтоб с domain1.com/nazvanie-posta-nomer-1 был линк на domain2.com/nazvanie-posta-nomer-1

Хм. Логика может быть такова: Парсер есть. Парсить сначала на domain2.com, на него повешать скрипт или плагин, автоматически проставляющий ссылку в посте на себя же. А с него парсить на domain1.com, где сразу с постом уже будет стоять линк на "первоисточник - domain2.com" (клон поста с него по-сути).

Скрипт типа такого.

Автоссылки типа такого (не весь урл), аналогичное что-то надо. Или проще, через функцию:

Постоянная ссылка на пост:

<br />

<?php echo get_permalink(); ?>

Либо спарсить, затем добавить в текстките через регулярки (омг!) ссылки, и раскидать опять по нужным сайтам. Но это уже ручной труд.

AdelinaHost
На сайте с 21.11.2012
Offline
169
#130
Nomiki:
Хм. Логика может быть такова: Парсер есть. Парсить сначала на domain2.com, на него повешать скрипт или плагин, автоматически проставляющий ссылку в посте на себя же. А с него парсить на domain1.com, где сразу с постом уже будет стоять линк на "первоисточник - domain2.com" (клон поста с него по-сути).

Скрипт типа такого.
Автоссылки типа такого (не весь урл), аналогичное что-то надо. Или проще, через функцию:
Постоянная ссылка на пост:
<br />

<?php echo get_permalink(); ?>


Либо спарсить, затем добавить в текстките через регулярки (омг!) ссылки, и раскидать опять по нужным сайтам. Но это уже ручной труд.

Не знаю насколько правильно будет парсить domain1 с domain2 или наоборот. Хотелось бы парсить оба сайта с перво источника.

Вот если бы в single.php работал бы тег /%postname%/, то тогда можно было бы внутри domain1.com поставить линк типа <a href="domain2.com/%postname/"> и результат был бы нужный, но такой тег не работает

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