it-swarm.com.de

fragen Sie Beiträge ab und weisen Sie Kategorien automatisch zu, wenn der Beitragstitel ein Schlüsselwort enthält

wie kann ich Posts nach aktuellem Datum abfragen und die Kategorie anhand des im Post-Titel gefundenen Schlüsselworts automatisch zuweisen? Beispiel: Wenn der Titel "Orangen" enthält, wird die Kategorie "Orangen" automatisch zugewiesen

vielleicht so etwas, was in die functions.php gehen kann

function add_category_automatically($post_ID) {
global $wpdb,$post;

   $today = getdate();
   $query = new WP_Query( 'year=' . $today["year"] . '&monthnum=' . $today["mon"] .'&day=' . $today["mday"] );
while ( $the_query->have_posts() ) : $the_query->the_post();

  $post_title = get_the_title();
   if (stripos($post_title, 'oranges')!==false) {
    $cat = array(8);
    wp_set_object_terms($post_ID, $cat, 'category');
}
 endwhile;
}
 add_action('publish_post', 'add_category_automatically');

der obige Code funktioniert nicht, obwohl der folgende Code funktioniert, aber er funktioniert nicht wirklich für vorhandene Beiträge, bis ich sie erneut aktualisiere. Daher möchte ich, dass eine Funktion alle Beiträge nach dem aktuellen Datum abfragt und sie nur ausgeführt wird, wenn sie neu gefunden werden Beiträge für heute

    function add_category_automatically($post_ID) {
global $wpdb,$post;

       $post_title = get_the_title();
     if (stripos($post_title, 'oranges')!==false) {
    $cat = array(8);
    wp_set_object_terms($post_ID, $cat, 'category');
  }

     }
      add_action('publish_post', 'add_category_automatically');

Aktualisieren:

ich benutze diesen Code jetzt, es funktioniert, wenn ich einen neuen Beitrag veröffentliche, aber nicht für bestehende Beiträge? ..... es sollte jedes Mal laufen und alle Beiträge in der Datenbank überprüfen und den Beitrag automatisch kategorisieren, aber smhw es ist nicht

       add_action( 'wp_insert_post', 'update_post_terms' );
       function update_post_terms( $post_id ) {
      if ( $parent = wp_is_post_revision( $post_id ) )
    $post_id = $parent;
   $post = get_post( $post_id );
    if ( $post->post_type != 'post' )
    return;
     $post_title = get_the_title();
       if (stripos($post_title, 'oranges')!==false) {

     // add a category
      $categories = wp_get_post_categories( $post_id );
        $newcat    = get_term_by( 'name', 'oranges', 'category' );
        array_Push( $categories, $newcat->term_id );
        wp_set_post_categories( $post_id, $categories );
     } 
        }

ich weiß, es wird eine gute Last auf meine Datenbank setzen, auch wenn ich dies herausfinde, aber ich suche nach einer Möglichkeit, dies wie eine Instanz alle zwei Stunden oder so etwas zu tun. Bitte helfen Sie!

Aktualisiere 2, um alle Beiträge zu überprüfen und sie zu wiederholen, um die Kategorie zu pushen

 $postids = array();
   //this is to tell the script to only pull posts that are labeled "publish"
  $args=array(
     'post_type' => 'post',
      'post_status' => 'publish',
      'posts_per_page' => -1,
      'caller_get_posts'=> 1
   );
  $my_query = null;
$my_query = new WP_Query($args);
   if ( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post();
$postids[]=$my_query->post->ID;
endwhile;
 }
 wp_reset_query();  // Restore global post data stomped by the_post().

 $i = 0;

  while ($num_of_posts > $i){
  $post_id = $postids[$i];
  add_action( 'wp_insert_post', 'update_post_terms' );
  function update_post_terms( $post_id ) {
  if ( $parent = wp_is_post_revision( $post_id ) )
    $post_id = $parent;
   $post = get_post( $post_id );
  if ( $post->post_type != 'post' )
    return;
  $post_title = get_the_title();
 if (stripos($post_title, 'oranges')!==false) {

 // add a category
  $categories = wp_get_post_categories( $post_id );
  $newcat    = get_term_by( 'name', 'Oranges', 'category' );
  array_Push( $categories, $newcat->term_id );
  wp_set_post_categories( $post_id, $categories );
 }
 }
  $i++;
 }
1
Ravi

Der erste Code wird nur für Posts verwendet, die Ihrer Suchanfrage entsprechen - d. H. Posts, die an diesem Tag veröffentlicht wurden. So etwas wie

$query = new WP_Query( 'post_type=post' );

sollten alle Beiträge abrufen, und dann könnten Sie sie durchlaufen und die erforderliche Operation ausführen.

Ein Wort der Warnung. Wenn ein Beitrag veröffentlicht wird, wird Ihre Funktion ausgeführt. Bei jedem neuen veröffentlichten Beitrag werden alle Ihre Beiträge überprüft und (falls erforderlich) der Kategorie hinzugefügt. Um Zeit zu sparen/die Datenbank unnötig abzufragen, möchten Sie möglicherweise die erste Funktion nur einmal verwenden (möglicherweise durch Klicken auf eine Schaltfläche auslösen) und dann die zweite Funktion für alle neuen Beiträge verwenden, bei denen nur der veröffentlichte Beitrag überprüft wird.

Antwort auf aktualisierte Frage Wenn Sie planen möchten, die Funktion zu wiederholen, verwenden Sie:

<?php wp_schedule_event($timestamp, $recurrence, $hook, $args); ?>

$timestamp ist ein UNIX-Zeitstempel für den Zeitpunkt des ersten geplanten Auftretens. $recurrence ist eine Zeichenfolge, die beschreibt, wie regelmäßig dies geschehen soll (z. B. "täglich", "stündlich" usw.). $hook ist Ihr Funktionsname als Zeichenfolge, d. h. "update_post_terms". Schließlich ist $args ein Array von (optionalen) Argumenten für Ihre Funktion.

So wie es aussieht, nimmt Ihre Funktion $post_id als Argument und aktualisiert nur diesen Beitrag. Möglicherweise benötigen Sie eine andere Funktion (die regelmäßig aufgerufen wird), um alle Ihre Posts zu durchlaufen und die oben genannte Funktion aufzurufen, wenn Sie alle Posts (täglich, stündlich usw.) aktualisieren möchten.

Weitere Informationen finden Sie auf der Codex-Seite .

Hoffe das hilft!

1
Stephen Harris