Alle Seiten auflisten, die Shortcode enthalten (WordPress)

Lesezeit: 3 Minuten

Ich schreibe ein Plugin für WordPress, das Shortcodes erstellt. Auf dieser Plugin-Einstellungsseite möchte ich, dass aufgelistet wird, auf welchen Seiten der Shortcode verwendet wird. (Um den Zugriff zu erleichtern und sie für schnelle Änderungen aufzufinden.)

Ich dachte, es wäre etwas mit get_post(), wo es alle Beiträge durchsucht, die einem Filter entsprechen, und sie dann auflistet, aber ich kann anscheinend nicht herausfinden, wie die Syntax dafür aussehen würde oder ob dies überhaupt möglich ist.

Irgendwelche Vorschläge?

  • Sie können zwar einen Hook einfügen, der Sie benachrichtigt, wenn Ihr Shortcode aufgerufen/geparst wird, dies würde jedoch immer noch davon abhängen, dass jede Seite geladen wird. Sie müssen auf jeden Fall eine DB-Abfrage durchführen. Sie können Beiträge abrufen verwenden, alle Beiträge durchlaufen und dann verwenden strpos für entsprechende Felder (Inhalt, benutzerdefinierte Metaboxen usw.) Alternativ können Sie die Datenbank direkt abfragen: SELECT * FROM wp_postmeta` WO meta_value WIE ‘%[hello]%’ LIMIT 0,1000`; Dadurch erhalten Sie die Ergebnismenge einschließlich post_ids

    – Baku

    20. Dezember 2018 um 21:32 Uhr


  • Eine Schleife durch alle Beiträge ist keine so gute Idee. Machen Sie einfach einen Haken bei „Beitrag speichern/aktualisieren“ und prüfen Sie, ob dieser Beitrag Ihren Shortcode verwendet hat oder nicht. Bei Verwendung: Platzieren Sie die Beitrags-ID in einer neuen benutzerdefinierten Tabelle und rufen Sie einfach alle Datensätze aus Ihrer benutzerdefinierten Tabelle ab.

    – amedv

    20. Dezember 2018 um 23:38 Uhr

  • Ich bin anderer Meinung, dies setzt voraus, dass alle Beiträge mindestens einmal geladen wurden, damit eine Registrierung erfolgen kann. Das heißt, wenn Sie Ihr Plugin zum ersten Mal installieren und aktivieren, ist diese Liste unvollständig. Sie könnten unnötige Abfragen minimieren, indem Sie Ihre Abfrage/Schleife nur bei der Plugin-Installation ausführen (und diese Datensätze dann zu einer benutzerdefinierten Tabelle hinzufügen, wie amedv vorschlägt), oder Sie könnten die Abfrage in einen vorübergehenden Cache einbinden

    – Baku

    21. Dezember 2018 um 0:27


  • Ich arbeite an der Implementierung eines Systems mit der Abfrage: SELECT * FROM wp_posts WO post_content WIE ‘%[mod-%’ AND post_status = ‘publish’ LIMIT 0,1000 based off of @baku ‘s comment. Will post results.

    – Riley Magnuson

    Dec 21, 2018 at 0:35

I figured this out with help from the wordpress forums.

Managed to do it like this:

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);

Then displayed it like so:

<?php foreach ( $results as $results ) { ?><p><a>ID;?>"><?php echo $results->post_title;?></a><br></p><?php } ?>

This will list all pages containing “[mod-” and provide a link to them.

I’ve put it in a handy shortcode 🙂

Please note: this filters for some post status’ only.

add_shortcode('find_posts_with_shortcode', function ($atts = []) { $atts = wp_parse_args($atts, [
        'tag' => false,
    ]);  if (!$atts['tag']) { return __('"tag"-Parameter ist erforderlich');  } $tag = trim($atts['tag']);  // Angepasst von shortcodes.php#add_shortcode if (0 !== preg_match('@[<>&/\[\]\x00-\x20=]@', $tag)) { /* Übersetzer: 1: Shortcode-Name, 2: Durch Leerzeichen getrennte Liste reservierter Zeichen.  */ return sprintf(__('Ungültiger Shortcode-Name: %1$s. Verwenden Sie keine Leerzeichen oder reservierten Zeichen: %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) . ']%' // dh [tag]
    );  $shortcode_usages = $wpdb->get_results($query);  if (count($shortcode_usages) == 0) { return __('Keine Verwendung gefunden');  } ob_start();  foreach ($shortcode_usages as $post) { echo '' .  $post->post_title .  ' (' . $post->post_status . ')
'; } return ob_get_clean(); });

1450790cookie-checkAlle Seiten auflisten, die Shortcode enthalten (WordPress)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy