WordPress: Shortcode für Ausgabe von Custom Post Type erstellen

WordPress Custom Post Types sind eine geniale Sache, schnell wird durch diese aus dem einfachen WordPress Baustein ein mächtiges und angepasstes Portal.

Angenommen ihr wollt z.b. die Sponsoren eures Fußballvereins einfach verwalten und an speziellen Stellen einen dieser ausgeben, dann bietet es sich an dafür einen Shortcode mit integrierter Abfrage zu erstellen. Dann könnt ihr an beliebiger Stelle einfach den Shortcode

[sponsor-listing anzahl="3"]

einfügen und bekommt dort 3 zufällige Sponsoren ausgegeben. Damit das ganze Funktioniert sollte natürlich der Entsprechende Custom Post Type vorhanden sein.

// Register Custom Post Type
function sl_sponsoren_register() {

	$labels = array(
		'name'                => 'Sponsoren',
		'singular_name'       => 'Sponsor',
		'menu_name'           => 'Sponsoren',
		'name_admin_bar'      => 'Sponsoren',
		'parent_item_colon'   => 'Sponsor',
		'all_items'           => 'alle Sponsoren',
		'add_new_item'        => 'neuen Sponsor erstellen',
		'add_new'             => 'Neuen Sponsor',
		'new_item'            => 'neuer Sponsor',
		'edit_item'           => 'Sponsor bearbeiten',
		'update_item'         => 'Sponsor Speichern',
		'view_item'           => 'Sponsor anzeigen',
		'search_items'        => 'Sponsor suchen',
		'not_found'           => 'nichts gefunden',
		'not_found_in_trash'  => 'nichts gefunden',
	);
	$args = array(
		'label'               => 'Sponsor',
		'description'         => 'Sponsoren',
		'labels'              => $labels,
		'supports'            => array( ),
		'hierarchical'        => false,
		'public'              => true,
		'show_ui'             => true,
		'show_in_menu'        => true,
		'menu_position'       => 5,
		'show_in_admin_bar'   => true,
		'show_in_nav_menus'   => true,
		'can_export'          => true,
		'has_archive'         => true,		
		'exclude_from_search' => false,
		'publicly_queryable'  => true,
		'capability_type'     => 'page',
	);
	register_post_type( 'sponsor', $args );

}
add_action( 'init', 'sl_sponsoren_register', 0 );

Der Posttype sollte in eurer functions.php registiert sein (oder natürlich in einem Plugin).

In der functions.php erstellen wir nun einen Shortcode, der es uns ermöglicht eine Query durch unsere Sponsoren auszuführen:

add_shortcode( 'sponsor-listing', 'sl_sponsorlisting' );
function sl_sponsorlisting( $atts ) {
    ob_start();
 
    // Attribute holen
    extract( shortcode_atts( array (
        'anzahl' => 'anzahl'
      ), $atts ) );
 
    $options = array(
        'post_type' => 'sponsor',
        'orderby' => 'rand',
        'posts_per_page' => $anzahl,
    );
    $query = new WP_Query( $options );
    if ( $query->have_posts() ) { 
             the_content(); 
   
        return = ob_get_clean();
    }
}

[Mysql] eigene Sortierung – Order by Field

Datenbanken sind Klasse – vor allem die Möglichkeiten Datensätze direkt in die richtige Reihenfolge zu bringen.
Und selbst wenn einem einmal nicht die Standart Sortierung von groß nach klein oder von klein nach groß eignet so bietet Mysql noch das I-Tüpfelchen.
Sort by field

SELECT * FROM aufstellung ORDER by 
        Field(spielposition, 'Torwart', 'Abwehr', 'Mittelfeld', 'Angriff');

 
Damit selektieren wir alle Spieler auf der Datenbank Aufstellung und sortieren sie nach der Reihenfolge der Position wie sie auf dem Platz vorkommen.

Mysqli Spickzettel

MySQLI ist eine feine Sache und im Vergleich zur alten MySQL Unterstützung in PHP ein echter Traum. Anbei ein paar nützliche Beispiele.

Verbindung erstellen

$con = new mysqli("localhost", "testuser", "testpassword", "testdatenbank");

 

Datensätze holen

$res = $con->query("SELECT * FROM irgendwas");
while($row = $res->fetch_object()) {
   echo $row->name;
}

 

Datenbank wechseln

$con->select_db("andereDB");

 

Fehler ausgeben

$con->error;

 

Anzahl an Einträgen ausgeben

$res = $con->query("SELECT * FROM irgendwas");
$anzahl = $res->num_rows;

 

Letzten Auto Increment Wert ausgeben

$con->insert_id;

 

PHP:Auf String in String prüfen

PHP bietet intern keine „direkte“ Funktion zum Prüfen ob ein String in einem String vorhanden ist, wie Java (contains) und co.

Abhilfe schafft die Prüfung nach der Position mit strpos, wenn diese nicht false ist, befindet sich der String im String.

if(strpos($suche, $string) !== false) { 
   echo "String ist vorhanden; 
}

Wichtig: Verwendet unbedingt !==, da hierbei auch überprüft wird ob der Typ identisch ist. Ansonsten würde Position 0 auch als false interpretiert werden.