@cazumbra

Как изменить условия для вывода картинки в метатегах?

Добрый день. Имею код, который в Wordpress используется для SEO - добавляет метатеги в том числе Open Graph разметку. Хочу для соцсетей задавать отдельную картинку для вывода в мета теге og:image. Используется переменная $thumb_id, которая определяется ранее. Мне нужно, чтобы при наличии картинки, загруженной в произвольном поле записи Wordpress, выводилась именно она, независимо от того, есть в статье еще картинки или нет. В нижеприведенном коде часть
global $post;
					$meta_social_image = get_post_meta($post->ID, 'meta_social_image', true);
				if ( $meta_social_image) {
					$thumb_id = $meta_social_image; 
				}


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

$fn__get_thumb_id_from_text = function( $text ){
					global $post;
					$meta_social_image = get_post_meta($post->ID, 'meta_social_image', true);
				if ( $meta_social_image) {
					$thumb_id = $meta_social_image; 
				}  
				if(
					preg_match( '/<img +src *= *[\'"]([^\'"]+)[\'"]/', $text, $mm ) &&
					( $mm[1]{0} === '/' || strpos($mm[1], $_SERVER['HTTP_HOST']) )
				){
					$name = basename( $mm[1] );
					$name = preg_replace('~-[0-9]+x[0-9]+(?=\..{2,6})~', '', $name ); // удалим размер (-80x80)
					$name = preg_replace('~\.[^.]+$~', '', $name );                   // удалим расширение
					$name = sanitize_title( sanitize_file_name( $name ) );            // приведем к стандартному виду

					global $wpdb;
					$thumb_id = $wpdb->get_var(
						$wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = 'attachment'", $name )
					);
				} else {
					$zm_social_image = get_theme_mod('zm_social_image');
					$thumb_id = $zm_social_image; 
				}

				return empty($thumb_id) ? 0 : $thumb_id;
			};
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ответы на вопрос 1
cesnokov
@cesnokov
<head>&nbsp;</head>
Ваша функция:
1. Принимает строку с текстом в котором потенциально может быть картинка.
2. Берёт картинку если она подцеплена к полю "meta_social_image".
3. Разбирает строку из первого пункта, если находит в ней картинку то берёт из базы данных её ID.
4. Если картинки в тексте нет, то берёт какую-то стандартную картинку из "zm_social_image".
5. Возвращает или ID из текста или ID из "zm_social_image", при этом"meta_social_image" давно забыта.

Думаю, что в вашем случае, если картинка подцеплена к "meta_social_image", дальше ничего делать не надо: возвращаем её ID и выходим из функции. То есть выглядеть это будет так:
$fn__get_thumb_id_from_text = function( $text ){
  global $post;
  $meta_social_image = get_post_meta($post->ID, 'meta_social_image', true);
  if ( $meta_social_image ) {
    return $meta_social_image; // Всё, картинка есть, заканчиваем
  }  
  
  if( preg_match( '/<img +src *= *[\'"]([^\'"]+)[\'"]/', $text, $mm ) &&
    ( $mm[1]{0} === '/' || strpos($mm[1], $_SERVER['HTTP_HOST']) ) ){
      $name = basename( $mm[1] );
      $name = preg_replace('~-[0-9]+x[0-9]+(?=\..{2,6})~', '', $name ); // удалим размер (-80x80)
      $name = preg_replace('~\.[^.]+$~', '', $name );                   // удалим расширение
      $name = sanitize_title( sanitize_file_name( $name ) );            // приведем к стандартному виду

      global $wpdb;
      $thumb_id = $wpdb->get_var(
        $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = 'attachment'", $name )
      );
  } else {
    $zm_social_image = get_theme_mod('zm_social_image');
    $thumb_id = $zm_social_image; 
  }

  return empty($thumb_id) ? 0 : $thumb_id;
};
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы