Получить значение из Gutenberg SelectControl в php для внешнего интерфейса - PullRequest
0 голосов
/ 02 октября 2018

У меня есть простой блок Гутенберга с выбранными шрифтами Google.

el (SelectControl,
{   
    value: fontFamily,
    label: __('Шрифт'),
    options: [                                  
        {
            value: 'Georgia',
            label: 'Georgia'
        },
        { 
            value: 'PT Sans', 
            label: 'PT Sans' 
        },
        { 
            value: 'Amatic SC', 
            label: 'Amatic SC' 
        },
    ],
    onChange: onChangefontFamily,
},),

php:

function google_fonts_url() {   
  $fonts_url = '';  
  $font_families = array();
  $font_families[] = 'Amatic SC|PT Sans:400,400i';
  $query_args = array(
      'family' => urlencode( implode( '|', $font_families ) ),
      'subset' => urlencode( 'latin,cyrillic' ),
  );
  $fonts_url = add_query_arg( $query_args, 'https://fonts.googleapis.com/css' );    
  return $fonts_url; }                                           

Мне нужно загрузить только выбранный шрифт из Google.

Какполучить значение для выбора для этого?

1 Ответ

0 голосов
/ 17 января 2019

Гутенберг сохраняет атрибуты блока в комментариях HTML внутри post_content.Поэтому вам нужно разобрать комментарии HTML с помощью PHP.Один из способов сделать это - использовать DOMDocument

Допустим, ваш контент сохранен в post_content следующим образом:

<!-- wp:yourprefix/yourblock {"fontFamily":"Amatic SC"} -->
 <div class="wp-block-yourprefix-yourblock"></div>
<!-- /wp:yourprefix/yourblock -->

Затем вы можете получить содержимое поста./ page using:

$content_post = get_post($my_postid);
$content = $content_post->post_content;

Это содержимое затем может быть проанализировано библиотекой DOMDocument для извлечения значения выбора, закодированного в JSON

$dom = new DOMDocument();

//Pass the content to the loadHTML function
$dom->loadHTML($content);
$xpath = new DOMXPath($dom);

//Extract Comment Nodes
$comments = $xpath->query('//comment()');

//Extract text from the 1st node
$text = $comments->item(0)->data;

//Match the JSON string and decode to get the selected font value
preg_match('~\{(?:[^{}]|(?R))*\}~', $text,$res);
$fontFamily = json_decode($res[0])->fontFamily;
...