it-swarm.com.de

Brauchen Sie Rat?> Konvertieren von Kategoriezuweisungen in benutzerdefinierte Post-Meta-Werte

Bevor ich die Möglichkeit erkannte, dem Seiten- und Post-Editor ein Meta-Feld (mit benutzerdefinierten Post-Meta-Auswahlen) hinzuzufügen, verwendete ich (und bin es immer noch) Kategorien, um benutzerdefinierte Post-Meta zu definieren.

Um zum Beispiel einen Beitrag als nofollow oder noindex zu definieren, habe ich eine Kategorie mit dem Namen nofollow und eine andere mit dem Namen noindex erstellt und eine oder beide dieser Kategorien einem Beitrag oder einer Seite zugewiesen.

Dann würde ich in meiner header.php-Datei einen in_category-Test durchführen, um die entsprechenden Meta-Tags auf die Seite zu schreiben.

Beispiel:

<?php
if (in_category('noindex') && in_category('nofollow')){?>
<meta name="robots" content="noindex, nofollow">
<?php}?>

Ich habe auch benutzerdefinierte Kategorien für Dinge wie "AdSense für diese Seite deaktivieren", "Bildanhänge für diese Seite nicht anzeigen", "Diese Seite aus Menüs ausblenden" usw.

Nachdem ich mich entschieden habe, keine Kategorien mehr zu verwenden, in denen benutzerdefinierte Post-Metas verwendet werden sollen, wird der obige Code in der Datei header.php stattdessen ...

<?php 
    if (get_post_meta( $post->ID, '_noindex', true ) && get_post_meta( $post->ID, '_nofollow', true )){>?
    <meta name="robots" content="noindex, nofollow">
<?php } ?>

Das ist mein Plan, aber jetzt habe ich das Problem, Websites zu aktualisieren, bei denen die alten Methoden zum Definieren benutzerdefinierter Post-Optionen über die Kategoriezuweisungen verwendet werden.

Daher benötige ich ein Routing, bei dem die Kategoriewerte für jeden Beitrag und jede Seite auf der zu aktualisierenden Website benutzerdefinierten Post-Meta-Werten zugewiesen werden.

Ich bin nur auf der Suche nach ein paar schnellen Ratschlägen und möglicherweise ein paar Codehinweisen zur erforderlichen Routine.

Da dies ein Thema ist, das als Teil des Aktualisierungsprozesses aktualisiert werden kann, möchte ich ein Skript einmal ausführen, wenn das Thema zum ersten Mal installiert wird (oder der Benutzer auf mein Upgrade-Dienstprogramm klickt), das in der Optionstabelle ausgeführt wird und für jede Instanz einer meiner benutzerdefinierten Kategoriezuweisungen wird die erforderliche benutzerdefinierte Metazuweisung für diesen Beitrag oder diese Seite erstellt.

Wenn beispielsweise ein Beitrag derzeit zur Kategorie "Versteckt" gehört, wird er dem Post-Meta "_hidden" zugewiesen.

Hoffentlich habe ich das gut genug erklärt. Ich freue mich über Ihre Erkenntnisse.

Vielleicht ist es so einfach wie eine Reihe von benutzerdefinierten SQL-Anweisungen, die für jede mögliche Kategoriezuweisung ausgeführt werden?

1
Scott B

Die Grundidee wäre, die Posts und ihre Kategorien zu durchlaufen und Metas für Übereinstimmungen zuzuweisen.

So etwas wie das folgende (achten Sie darauf, die Testkopie der Daten usw. usw. zu überprüfen):

$posts = get_posts( array(
    'numberposts' => -1
) );

foreach( $posts as $post ) {

    $categories = get_the_category( $post->ID );

    foreach( $categories as $category ) {

        if( 'Hidden' ==  $category->name )
            add_post_meta( $post->ID, '_hidden', 'yes', true );
    }

}

Haben Sie vergessen, das Löschen hinzuzufügen, wenn Sie fertig sind:

$category = get_category_by_slug( 'hidden' );
wp_delete_category( $category->term_id );
1
Rarst