getMacros( $postType, $pageType ); if ( preg_match( '#%%BLOGDESCLINK%%#', $string ) ) { $blogDescriptionLink = '' . aioseo()->helpers->decodeHtmlEntities( get_bloginfo( 'name' ) ) . ' - ' . aioseo()->helpers->decodeHtmlEntities( get_bloginfo( 'description' ) ) . ''; $string = str_replace( '%%BLOGDESCLINK%%', $blogDescriptionLink, $string ); } if ( preg_match_all( '#%%cf_([^%]*)%%#', $string, $matches ) && ! empty( $matches[1] ) ) { foreach ( $matches[1] as $name ) { if ( ! preg_match( '#\s#', $name ) ) { $string = aioseo()->helpers->pregReplace( "#%%cf_$name%%#", "#custom_field-$name", $string ); } } } if ( preg_match_all( '#%%tax_([^%]*)%%#', $string, $matches ) && ! empty( $matches[1] ) ) { foreach ( $matches[1] as $name ) { if ( ! preg_match( '#\s#', $name ) ) { $string = aioseo()->helpers->pregReplace( "#%%tax_$name%%#", "#tax_name-$name", $string ); } } } foreach ( $macros as $macro => $tag ) { $string = aioseo()->helpers->pregReplace( "#$macro(?![a-zA-Z0-9_])#im", $tag, $string ); } // Strip out all remaining tags. $string = aioseo()->helpers->pregReplace( '/%[^\%\s]*\([^\%]*\)%/i', '', aioseo()->helpers->pregReplace( '/%[^\%\s]*%/i', '', $string ) ); return trim( $string ); } /** * Returns the macro mappings. * * @since 4.1.1 * * @param string $postType The post type. * @param string $pageType The page type. * @return array $macros The macros. */ protected function getMacros( $postType = null, $pageType = null ) { $macros = [ '%%sitename%%' => '#site_title', '%%sitedesc%%' => '#tagline', '%%sep%%' => '#separator_sa', '%%term_title%%' => '#taxonomy_title', '%%term_description%%' => '#taxonomy_description', '%%category_description%%' => '#taxonomy_description', '%%tag_description%%' => '#taxonomy_description', '%%primary_category%%' => '#taxonomy_title', '%%archive_title%%' => '#archive_title', '%%pagenumber%%' => '#page_number', '%%caption%%' => '#attachment_caption', '%%name%%' => '#author_first_name #author_last_name', '%%user_description%%' => '#author_bio', '%%date%%' => '#archive_date', '%%currentday%%' => '#current_day', '%%currentmonth%%' => '#current_month', '%%currentyear%%' => '#current_year', '%%searchphrase%%' => '#search_term', '%%AUTHORLINK%%' => '#author_link', '%%POSTLINK%%' => '#post_link', '%%BLOGLINK%%' => '#site_link', '%%category%%' => '#categories', '%%parent_title%%' => '#parent_title', '%%wc_sku%%' => '#woocommerce_sku', '%%wc_price%%' => '#woocommerce_price', '%%wc_brand%%' => '#woocommerce_brand', '%%excerpt%%' => '#post_excerpt', '%%excerpt_only%%' => '#post_excerpt_only' /* '%%tag%%' => '', '%%id%%' => '', '%%page%%' => '', '%%modified%%' => '', '%%pagetotal%%' => '', '%%focuskw%%' => '', '%%term404%%' => '', '%%ct_desc_[^%]*%%' => '' */ ]; if ( $postType ) { $postType = get_post_type_object( $postType ); if ( ! empty( $postType ) ) { $macros += [ '%%pt_single%%' => $postType->labels->singular_name, '%%pt_plural%%' => $postType->labels->name, ]; } } switch ( $pageType ) { case 'archive': $macros['%%title%%'] = '#archive_title'; break; case 'term': $macros['%%title%%'] = '#taxonomy_title'; break; default: $macros['%%title%%'] = '#post_title'; break; } // Strip all other tags. $macros['%%[^%]*%%'] = ''; return $macros; } }