script eenmalig laten lopen op alle posts in wordpress

Status
Niet open voor verdere reacties.

nessler

Gebruiker
Lid geworden
31 mei 2005
Berichten
54
hoi allen,

voor onze website hebben we een script dat van elk keyword de eerste letter neemt en opslaat, dit om een index te kunnen maken van alle posts.
Dit werkt goed voor iedere post die we updaten. Helaas hebben we een groot arsenaal aan bestaande artikels met keywords die we niet 1 per 1 willen updaten.
De taxonomy alphabetical_letter is aangemaakt via de pods plugin en het keyword custom field via de advanced custom fields plugin.

Kan iemand ons helpen om dit onderstaande script om te bouwen zodanig dat het alle posts doorloopt ? Wij hebben al wat geprobeerd maar zonder al te veel succes, helaas...

PHP:
function my_acf_update_letter( $value, $post_id, $field  ) {

    $taxonomy = 'alphabetical_letter';
    $first_letter = strtoupper(substr($value, 0, 1));

    wp_set_post_terms( $post_id, $first_letter, $taxonomy );

    // return
    return $value;

}
add_filter('acf/update_value/name=keyword', 'my_acf_update_letter', 10, 3);
 
Wat heb je al geprobeerd?
 
exact deze, met een aanpassing aan de memory limit naar -1 omdat ie vastliep. helaas niet het gewenste resultaat...

Code:
function kia_run_once(){
 
    if ( false === get_transient( 'kia_run_once' ) ) {
 
        $taxonomy = 'alphabetical_letter';
        $alphabet = array();
 
        $posts = get_posts(array('numberposts' => -1) );
 
        foreach( $posts as $p ) :
        //set term as first letter of post title, lower case
	      $first_letter = strtoupper(substr($value, 0, 1));

        wp_set_post_terms( $p->ID, $first_letter, $taxonomy );
	  
        endforeach;
 
        set_transient( 'kia_run_once', 'true' );
 
    }
 
}
add_action('init','kia_run_once');
 
Een memorylimit omzeilen is ook vragen om problemen. Waar zat het euvel overigens?
 
Waar zit het euvel dan volgens de memory limit? Ik vermoed dat er een oneindig loopje plaatsvindt.
Geheugen moet je altijd(!) beperken.
 
ah ok.

dit is de melding die ik krijg.
Ik zag trouwerns dat ik in de functie titel vermeld terwijl het het custom field "keyword" moet zijn.
Kan ik dit oplossen door ergens get_field te gebruiken en zo ja hoe zou ik dat best aanpakken zoals hieronder ?
De $alphabet heb ik er uit gegooid omdat ik die nergens in de functie hier gebruik.
ik heb er een ini_set ('memory_limit','2048M'); aan toegevoegd

Ik voeg de code toe via een snippet plugin, hij voert alles uit (zegt ie toch) maar het resultaat is er helaas niet.
(de eerste letter van het keyword moet dus in het veld alphabetical letter komen)

PHP:
function kia_run_once(){
 
    if ( false === get_transient( 'kia_run_once' ) ) {
 //vars
        $keyword = get_field('keyword');
        $taxonomy = 'alphabetical_letter';
        $posts = get_posts(array('numberposts' => -1) );
 
//action
        foreach( $posts as $p ) :
        //set term as first letter of keyword, lower case
	      $first_letter = strtoupper(substr($keyword, 0, 1));

        wp_set_post_terms( $p->ID, $first_letter, $taxonomy );
	  
        endforeach;
 
        set_transient( 'kia_run_once', 'true' );
 
    }
 
}
add_action('init','kia_run_once');
 
Waarom 2 GB aan geheugen?
 
gewoon een inschatting, met of zonder dat geheugen werkt het evengoed niet
 
Je zei dat je script vastliep. Kan je dat wat duidelijker omschrijven?
 
offtopic. De alternatieve syntax (endwhile, endforeach, endif, ...) wordt in templates gebruikt die min. 3/4 uit html bestaat zodat de leesbaarheid van de html wordt vergroot. In php functies zou ik gewoon de { } gebruiken zodat editors de blokken kunnen "invouwen", dat is handig bij het coderen en debuggen. Beide notaties door elkaar heen gebruiken is wat onhandig, wel endforeach maar geen endif.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan