Recently we faced a great plugin to display PDF files in a fancy way - like a paper magazine! It's the Real3D Flipbook plugin, which is awesome! However it also has the same problem - users are not possible to search PDF documents uploaded to the Real3D FlipBook by the content.
Fortunately, it is also simple to fix with the WPFTS Pro.
add_filter('wpfts_index_post', function($index, $p)
{
global $wpdb, $wpfts_core;
if (in_array($p->post_type, array('post', 'page'))) {
global $post;
if (preg_match_all('~\[real3dflipbook((\s+[^\]]*)|(\]))\]~sU', $p->post_content, $zz, PREG_OFFSET_CAPTURE)) {
// 1 is a shortcode params
// 0 is a whole shortcode tag
require_once $wpfts_core->root_dir.'/includes/wpfts_utils.class.php';
$sum = '';
foreach ($zz[1] as $k => $d) {
if (isset($d[0])) {
$zz2 = array();
if (preg_match('~id=[\x22\x27]?(\d+)~', $d[0], $zz2)) {
$bookid = $zz2[1];
// Look for data
$ff = get_option('real3dflipbook_'.$bookid);
if ($ff && (is_array($ff))) {
if (isset($ff['pdfUrl'])) {
$url = trim($ff['pdfUrl']);
if (strlen($url) > 0) {
$ret = WPFTS_Utils::GetCachedFileContent_ByLocalLink($url);
$sum .= (isset($ret['post_content']) ? trim($ret['post_content']) : '').' ';
}
}
}
}
}
}
$index['real3dflipbook_content'] .= $sum;
/*
$content = $p->post_content;
// Remove the pdfviewer shortcodes
for ($ii = count($zz[0]) - 1; $ii >= 0; $ii --) {
$content = substr($content, 0, $zz[0][$ii][1]).substr($content, $zz[0][$ii][1] + strlen($zz[0][$ii][0]));
}
$index['post_content'] = $content;
*/
global $shortcode_tags;
$removed_tmp = array();
$shortcode_list = array('real3dflipbook');
foreach ($shortcode_list as $dd) {
if (isset($shortcode_tags[$dd])) {
$removed_tmp[$dd] = $shortcode_tags[$dd]; // Save shortcode function
unset($shortcode_tags[$dd]);
} else {
$removed_tmp[$dd] = false;
}
add_shortcode($dd, function(){ return ''; }); // Dummy function to render empty string for shortcode
}
$post = get_post($p->ID);
setup_postdata($post);
ob_start();
the_content();
$r = ob_get_clean();
$r = strip_tags(str_replace('<', ' <', $r));
// Okay, we need to restore shortcodes
foreach ($removed_tmp as $k => $d) {
if ($d) {
$shortcode_tags[$k] = $removed_tmp[$k];
} else {
unset($shortcode_tags[$k]);
}
}
wp_reset_postdata();
$index['post_content'] = $r;
}
}
return $index;
}, 3, 2);
Well, the code is not that simple, but if you just want to have it works,
download the ready addon!
https://fulltextsearch.org/wpfts-addon-real3dflipbook-1.0.0.zip