我正在为wordpress编写一个可创建简码的插件。在此插件设置页面上,我希望它列出使用短代码的页面。 (为了便于访问和查找它们以进行快速更改。)
我认为这与get_post()有关,它会搜索与过滤器匹配的所有帖子,然后列出它们,但是我似乎无法弄清楚其语法是什么,或者这是否是甚至可能。
有什么建议吗?
答案 0 :(得分:2)
我在wordpress论坛的帮助下找到了答案。
设法做到这一点:
global $wpdb;
$query = "SELECT ID, post_title, guid FROM ".$wpdb->posts." WHERE post_content LIKE '%[mod-%' AND post_status = 'publish'";
$results = $wpdb->get_results ($query);
然后将其显示如下:
<?php foreach ( $results as $results ) { ?><p><a>ID;?>"><?php echo $results->post_title;?></a><br></p><?php } ?>
这将列出所有包含“ [mod-””的页面并提供指向它们的链接。
答案 1 :(得分:0)
我把它放在一个方便的简码中:)
请注意:这仅过滤某些帖子状态。
add_shortcode('find_posts_with_shortcode', function ($atts = []) {
$atts = wp_parse_args($atts, [
'tag' => false,
]);
if (!$atts['tag']) {
return __('"tag" parameter is required');
}
$tag = trim($atts['tag']);
// Adapted from shortcodes.php#add_shortcode
if (0 !== preg_match('@[<>&/\[\]\x00-\x20=]@', $tag)) {
/* translators: 1: Shortcode name, 2: Space-separated list of reserved characters. */
return sprintf(__('Invalid shortcode name: %1$s. Do not use spaces or reserved characters: %2$s'), $tag, '& / < > [ ] =');
}
global $wpdb;
$query = $wpdb->prepare(
"SELECT id, post_title, post_status
FROM $wpdb->posts
WHERE (post_content LIKE %s OR post_content LIKE %s)
AND post_status IN ('publish', 'private', 'draft')
ORDER BY post_title",
'%[' . $wpdb->esc_like($tag) . ' %', // i.e. [tag param..]
'%[' . $wpdb->esc_like($tag) . ']%' // i.e. [tag]
);
$shortcode_usages = $wpdb->get_results($query);
if (count($shortcode_usages) == 0) {
return __('No usage found');
}
ob_start();
foreach ($shortcode_usages as $post) {
echo '<a href="' . get_permalink($post->id) . '">' . $post->post_title . ' (' . $post->post_status . ')</a><br />';
}
return ob_get_clean();
});