web-dev-qa-db-ja.com

ショートコードから属性値を取得する

私はこのショートコードを持っています

  [learn_more caption="something here:"]
  [/learn_more]

キャプション値を抽出し、他のものを削除したいです。 「ここに何か」

これは私が持っているコードですが、それはそのままショートコードを出力します。

 $exclude_codes = 'learn_more';
 $wp_content = preg_replace("~(?:\[/?)(?!(?:$exclude_codes))[^/\]]+/?\]~s", '', $wp_content); 

ありがとう

1
Ahmad Ajmi

助けてくれてありがとう、実際に私は正規表現をまったく使わずに問題を解決した。 PDFにイベントページを出力しようとしたときにwp-event-managerと一緒にwp-mpdfプラグインを使用します。しかし、いくつかのカスタマイズの後、私はさまざまな場所からコンテンツを取得することができ、問題は解決されました。

mpdf_output関数内のwp-mdf.phpからのコード

$EM_Event = em_get_event($post->ID, 'post_id');

$wp_content = '';
$header_content = '<h1></h1>';
$footer_content = '';

$header_content .= '<h2><a href="' . get_permalink() . '" rel="bookmark" title="Permanent Link to ' . the_title('','', false) . '">' . the_title('','', false) . '</a></h2>';
$header_content .= '<h3>'.$EM_Event->output('#_EVENTDATES').'</h3>';            
$header_content .= '<h3>' .$EM_Event->output('#_LOCATIONNAME') . ' - ' .$EM_Event->output('#_LOCATIONCOUNTRY'). '</h3>';

$footer_content .= '<div id="footer">'; 
$footer_content .= '<strong></strong>';
$footer_content .= "<div>";

$wp_content .= $header_content;
$wp_content .= apply_filters('the_content', $wp_content);
$wp_content .= $footer_content;
0
Ahmad Ajmi

私はあなたの質問を@ eric-holmesとは違った方法で読みました。あなたのショートコードはほとんどの状況下で正常に機能する必要があるように私には思えますが、あなたは特別な状況下で情報を抽出しています。

ショートコードの正規表現は注意が必要です。 WordPressにあなたのためにやらせましょう。

$pattern = get_shortcode_regex();
preg_match_all("/$pattern/",$wp_content,$matches);

$wp_contentに存在するすべてのショートコードの属性は$matches[3]になります。あなたは何かをしたいのですが….

$lm_shortcode = array_keys($matches[2],'learn_more');
if (!empty($lm_shortcode)) {
    foreach($lm_shortcode as $sc) {
      $captions[] = $matches[3][$sc];
    }
}

そこに "caption ="があるので、あなたはまだ少し文字列をきれいにする必要があるでしょう、しかしあなたはあなたが始めた場所よりはるかに先に進んでいます、そしてあなたは$captionsにセット複雑さに応じて、str_replace または preg_replace が必要です。

ショートコードから属性値を取得する

4
s_ha_dum